java数据库的优化
List<Student> list = new ArrayList<Student>();
for(int i=0;i<list.size();i++){
Student st = (Student)list.get(i);
Object o = getHibernateTemplate().get(Student.class, st.getStudentId());
if(null == o){
...
Address addr = new Address();
...
getHibernateTemplate().saveOrUpdate(addr);
getHibernateTemplate().saveOrUpdate(o);
getSession().flush();
getSession().evict(addr);
getSession().evict(o);
} else {
...
Address addr = methodForFindAddr(o);
...
getHibernateTemplate().saveOrUpdate(hql);
getHibernateTemplate().saveOrUpdate(o);
getSession().flush();
getSession().evict(addr);
getSession().evict(o);
}
}
现在实现如上面代码所示,如果list数据量比较小的话,还可勉强凑合,若超过数万条数据,需耗费大量时间,有什么好的建议对此进行优化?
我曾试两种方法:1.过线程池的方式,可方法methodForFindAddr可能会出现同步问题,线程之间数据串了。
2.将所有saveOrUpdate的对象抽取出来,循环批量保存,每循环50次,flush一次。可是两个循环耗费的时间仍然很长。
2. java如何提高数据库连接的性能
用连接池
3. java程序开发 面试时经常被问到数据库怎么优化 这怎么回答
数据库优化:
硬件优化(硬件不用说了吧)、配置优化(DB2、MyIsam)、结构优化(就是建表时,建索引注意哪些,not
null判断、default默认值、不要用触发器)、查询优化(这个我救不细说了,
网上一大堆,
去搜一下)、
4. 对于开发一个java项目,怎么样提高它的速度、安全性、稳定性.哪些基本的
基础的就是那些。
1.代码优化 //写的不安全的代码,或者性能低下的。
2.数据库优化//数据库的分库分表等
3.虚拟机优化//优化虚拟机参数
4.缓存//包含前端缓存以及业务缓存,数据库缓存等。
5.负载均衡及集群//增加稳定性和负载
6.前端页面优化。//优化客户加载时间,提高效率
7.静态化//同上
等等。暂时想到这么多。。
5. java多线程访问数据库怎么优化啊,并发很大
个人觉得高写入并发的话先用缓存缓冲一下,可以合并的写入合并成批量写入可以管一些用但终归写入量很大的话还是要在数据库端优化了,把并发写均衡到多台服务器上,应该没有别的办法了。如果瓶颈不再数据库那就是应用服务器处理能力不足,升级应用服务器。
6. 使用jdbc从数据库查询数据,java程序需要考虑哪些优化方法
一、准备工作(一):Mysql安装配置和基础学习
使用JDBC操作数据库之前,首先你需要有一个数据库。这里提供了3个链接供读者自学,如果曾有过SQL语言的使用经历(包括在学校中的课堂学习),前两个链接足以上手。
1.安装和配置:mysql安装图解 mysql图文安装教程(详细说明)
2.基本操作:21分钟 MySQL 入门教程
3.简易命令查询 :一千行MySQL学习笔记
建议边看入门教程,边练习,在练习insert、update、select、delete等基本操作的同时,将后面要用的表建好。
下图是我接下来用于演示的数据库的表。
二、准备工作(二):下载数据库对应的jar包并导入
使用JDBC需要在工程中导入对应的jar包。数据库与JDBC包的对应关系可以参考各种数据库对应的jar包、驱动类名和URL格式。在Eclipse下的导入方法:
在工程的图标上右击,选择”Properties”,在”Java Bulid Path”中选择”Add External JARs…”,选择下载并解压后获得的jar包。
如果对MySQL进行操作,这时下面的import就不会报错了:
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
除此以外,还需要JDBC的包,直接import即可。
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
三、JDBC基本操作
为了简单起见,与数据库相关的操作、命令、参数都被硬编码了。有兴趣的读者可以对这些进行探索,降低数据与操作的耦合性。
先看具体代码并实践,本文第五部分对用到的API稍作了研究。
下面的所有方法和数据成员都在public class JDBCOperation内部。
(1)定义记录的类(可选)
这样做主要是为了便于操作和接口定义,是非必须的。
static class Student {
private String Id;
private String Name;
private String Sex;
private String Age;
Student(String Name, String Sex, String Age) {
this.Id = null; //default
this.Name = Name;
this.Sex = Sex;
this.Age = Age;
}
public String getId() {
return Id;
}
public void setId(String Id) {
this.Id = Id;
}
public String getName() {
return Name;
}
public void setName(String Name) {
this.Name = Name;
}
public String getSex() {
return Sex;
}
public void setSex(String Sex) {
this.Sex = Sex;
}
public String getAge() {
return Age;
}
public void setage(String Age) {
this.Age = Age;
}
}
(2)连接的获取
在操作前必须先获取与数据库的连接。
driver、url的格式同样可以参考各种数据库对应的jar包、驱动类名和URL格式。
private static Connection getConn() {
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/samp_db";
String username = "root";
String password = "";
Connection conn = null;
try {
Class.forName(driver); //classLoader,加载对应驱动
conn = (Connection) DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
(3)insert
private static int insert(Student student) {
Connection conn = getConn();
int i = 0;
String sql = "insert into students (Name,Sex,Age) values(?,?,?)";
PreparedStatement pstmt;
try {
pstmt = (PreparedStatement) conn.prepareStatement(sql);
pstmt.setString(1, student.getName());
pstmt.setString(2, student.getSex());
pstmt.setString(3, student.getAge());
i = pstmt.executeUpdate();
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
return i;
}
(4)update
private static int update(Student student) {
Connection conn = getConn();
int i = 0;
String sql = "update students set Age='" + student.getAge() + "' where Name='" + student.getName() + "'";
PreparedStatement pstmt;
try {
pstmt = (PreparedStatement) conn.prepareStatement(sql);
i = pstmt.executeUpdate();
System.out.println("resutl: " + i);
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
return i;
}
(5)select
以select * from XXX为例。
private static Integer getAll() {
Connection conn = getConn();
String sql = "select * from students";
PreparedStatement pstmt;
try {
pstmt = (PreparedStatement)conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
int col = rs.getMetaData().getColumnCount();
System.out.println("============================");
while (rs.next()) {
for (int i = 1; i <= col; i++) {
System.out.print(rs.getString(i) + "\t");
if ((i == 2) && (rs.getString(i).length() < 8)) {
System.out.print("\t");
}
}
System.out.println("");
}
System.out.println("============================");
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
(6)delete
private static int delete(String name) {
Connection conn = getConn();
int i = 0;
String sql = "delete from students where Name='" + name + "'";
PreparedStatement pstmt;
try {
pstmt = (PreparedStatement) conn.prepareStatement(sql);
i = pstmt.executeUpdate();
System.out.println("resutl: " + i);
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
return i;
}
7. java服务器socket 频繁插入数据库如何优化
多服务器并发处理比较理想。
8. 关于java链接数据库的参数优化。
public interface LoginService {
public int insertLogin(String name, String pwd);
public int login (String name, String pwd);
}
LoginServiceImpl.java ——
@Service
public class LoginServiceImpl implements LoginService {
@Autowired
private LoginDao loginDao;
@Override
public int insertLogin(String name, String pwd) {
return loginDao.insertLogin(String name, String pwd);
}
@Override
public int login(String name, String pwd) {
loginDao.selectRegLogin(name, pwd);
return 2;
}
}
UserDaoTest . java ——
@Repository
public class UserDaoTest extends BaseTxTestCase {
@Autowired
private UserInfoService userInfoService;
@Autowired
private LoginService logInService;
@Test
public void saveTest() {
int result = logInService.login("凯瑟琳", "4197782");
if (result ==2){
System.out.println("登陆成功,欢迎回到英雄联盟~");
}else if (result == 1){
System.out.println("用户名或密码错误!");
}else{
System.out.println("未知错误!");
}
}
9. java大数量数据库操作优化处理
存储过程的结果,也是要你去rs.getString的。试试多线程吧,每条线程每次查几千条
10. java 数据库多表连接查询性能优化
选择开始菜单中→程序→【Management
SQL
Server
2008】→【SQL
Server
Management
Studio】命令,打开【SQL
Server
Management
Studio】窗口,并使用Windows或
SQL
Server身份验证建立连接。
在【对象资源管理器】窗口中展开服务器,然后选择【数据库】节点
右键单击【数据库】节点,从弹出来的快捷菜单中选择【新建数据库】命令。
执行上述操作后,会弹出【新建数据库】对话框。在对话框、左侧有3个选项,分别是【常规】、【选项】和【文件组】。完成这三个选项中的设置会后,就完成了数据库的创建工作,
在【数据库名称】文本框中输入要新建数据库的名称。例如,这里以“新建的数据库”。
在【所有者】文本框中输入新建数据库的所有者,如sa。根据数据库的使用情况,选择启用或者禁用【使用全文索引】复选框。
在【数据库文件】列表中包括两行,一行是数据库文件,而另一行是日记文件。通过单击下面的【添加】、【删除】按钮添加或删除数据库文件。
切换到【选项页】、在这里可以设置数据库的排序规则、恢复模式、兼容级别和其他属性。
切换到【文件组】页,在这里可以添加或删除文件组。
完成以上操作后,单击【确定】按钮关闭【新建数据库】对话框。至此“新建的数据”数据库创建成功。新建的数据库可以再【对象资源管理器】窗口看到。