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。根據資料庫的使用情況,選擇啟用或者禁用【使用全文索引】復選框。
在【資料庫文件】列表中包括兩行,一行是資料庫文件,而另一行是日記文件。通過單擊下面的【添加】、【刪除】按鈕添加或刪除資料庫文件。
切換到【選項頁】、在這里可以設置資料庫的排序規則、恢復模式、兼容級別和其他屬性。
切換到【文件組】頁,在這里可以添加或刪除文件組。
完成以上操作後,單擊【確定】按鈕關閉【新建資料庫】對話框。至此「新建的數據」資料庫創建成功。新建的資料庫可以再【對象資源管理器】窗口看到。