javamysql存儲
Ⅰ java前提下, Mysql資料庫,一次性存儲大量數據導致內存溢出
內存溢出導致程序崩潰,也分是java層崩了,還是mysql崩了。
如果是java層崩了,注意不要一次性載入太多的數據到內存,並且不在使用的數據要徹底放棄引用關系。java雖然是自動回收,回收的原則就是一個對象不再被持有,即引用計數為零。如果數據太大,可考慮臨時文件。
如果是mysql崩了,首先增加配置緩存。一般來說mysql是不容易崩的,特別是插入操作的時候。查詢的時候如果查詢結果記錄集特別大,會導致一個查詢需要使用很大的內存空間,這種是有問題的。而插入操作都是一條一條的執行,不會導致大內存的使用。
如果僅僅是數據移植,也盡量不要用ORM框架,比如hibernate,mybatis這些東西,因為他們都有自己的緩存,直接使用JDBC比較好。
Ⅱ 一個關於java調用mysql 存儲過程的問題
在存儲過程中如果有查詢結果集,在java中執行存儲過程後,應使用其父介面Statement的getResultSet()方法獲取查詢結果集,此方法就返回ResultSet,如你上面若想獲取存儲過程中查詢結果集應如下:
ResultSet
rs
=
cst.getResultSet();
以下遍歷此rs即可...
...
Ⅲ java怎樣存數據到mysql資料庫
用java連接資料庫啊。下面給點例子可以參考,不大好,湊合看
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importjava.sql.SQLException;
publicclassJdbcConnection
{
privateStringdriver;
privateStringdbname;
privateStringusername;
privateStringpassword;
privateStringurl;
privateConnectioncon;
privatePreparedStatementpstmt;
privateResultSetrs;
publicJdbcConnection(){
this.driver="com.microsoft.sqlserver.jdbc.SQLServerDriver";
this.dbname=資料庫名";
this.username="資料庫賬號";
this.password="資料庫密碼";
this.url="地址加資料庫名";
}
//創建連接方法
publicConnectiongetconnection()
{
try
{
Class.forName(driver);
con=DriverManager.getConnection(url,username,password);
}catch(ClassNotFoundExceptione)
{
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(SQLExceptione)
{
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
returncon;
}
//關閉連接方法
publicvoidcoloseConnection(Connectioncon,ResultSetrs,PreparedStatementpstmt)
{
if(rs!=null)
{
try
{
rs.close();
}catch(SQLExceptione)
{
e.printStackTrace();
}
}
if(pstmt!=null)
{
try
{
pstmt.close();
}catch(SQLExceptione)
{
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
if(con!=null)
{
try
{
con.close();
}catch(SQLExceptione)
{
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
publicConnectiongetCon()
{
returncon;
}
publicvoidsetCon(Connectioncon)
{
this.con=con;
}
()
{
returnpstmt;
}
publicvoidsetPstmt(PreparedStatementpstmt)
{
this.pstmt=pstmt;
}
publicResultSetgetRs()
{
returnrs;
}
publicvoidsetRs(ResultSetrs)
{
this.rs=rs;
}
publicStringgetDriver()
{
returndriver;
}
publicvoidsetDriver(Stringdriver)
{
this.driver=driver;
}
publicStringgetDbname()
{
returndbname;
}
publicvoidsetDbname(Stringdbname)
{
this.dbname=dbname;
}
publicStringgetUsername()
{
returnusername;
}
publicvoidsetUsername(Stringusername)
{
this.username=username;
}
publicStringgetPassword()
{
returnpassword;
}
publicvoidsetPassword(Stringpassword)
{
this.password=password;
}
publicStringgetUrl()
{
returnurl;
}
publicvoidsetUrl(Stringurl)
{
this.url=url;
}
}
Ⅳ JAVA調用MySQL存儲過程
java代碼:
Class.forName("com.mysql.jdbc.Driver");
Connectioncon=DriverManager
.getConnection("jdbc:mysql://localhost:3306/test?user=root&password=111111");
Stringsql="{callsel(?)}";
CallableStatementcs=(CallableStatement)con.prepareCall(sql);
cs.execute();
Stringname=cs.getString(1);
System.out.println(name);
創建存儲過程代碼:
dropprocereifexistssel;
createproceresel(outname1varchar(225))
begin
;
end
輸出結果:
Ⅳ 求助JAVA調用MYSQL存儲過程的問題
1.資料庫存儲過程:簡單滴說,存儲過程就是存儲在資料庫中的一個程序。
2..資料庫存儲過程作用:
第一:存儲過程因為SQL語句已經預編繹過了,因此運行的速度比較快
第二:存儲過程可以接受參數、輸出參數、返回單個或多個結果集以及返回值。可以向程序返回錯誤原因。
第三:存儲過程運行比較穩定,不會有太多的錯誤。只要一次成功,以後都會按這個程序運行。
第四:存儲過程主要是在伺服器上運行,減少對客戶機的壓力。
第五:存儲過程可以包含程序流、邏輯以及對資料庫的查詢。同時可以實體封裝和隱藏了數據邏輯。
第六:存儲過程可以在單個存儲過程中執行一系列 SQL 語句。
第七:存儲過程可以從自己的存儲過程內引用其它存儲過程,這可以簡化一系列復雜語句。
此外,如果多條SQL語句執行過程中,過程環節返回了數據作為後面環節的輸入數據,如果直接通過
SQL語句執行,勢必導致大量的數據通過網路返回到客戶機,並在客戶機運算;如果封裝在存儲過程中,
則將運算放在伺服器進行,不但減少了客戶機的壓力,同時也減少了網路流量,提高了執行的效率。
3.mysql存儲過程:
MySQL5存儲過程,用得人好像不多。按照資料庫設計原理來講,存儲過程是在db server上預編譯的,所以查詢速度會比較起純SQL語句快很多。可能是現在流行OO,導至存儲過程使用的餘地大打折扣。但如果從效果上來講,用存儲過程來實現業務規則所帶得DB SERVER壓力,比用JAVA類實現業務規則所帶來的WEB SERVER壓力要小。當然存儲過程也不應濫用,象普通的insert、update之類的語句就不需要使用存儲過程了。
MySQL創建procure的語法與sql server/Oracle差別較大。
例1:傳入參數的procere
create procere usp_test(param varchar(20)
select * from talbeName where column=param
例2:更新表的procere
create procere usp_test2 (t varchar(20))
begin
set xname = 'test';
update table set column = xname where column1=t;
end
MySQL創建存儲過程時不帶as,而且()不能省略,即便是沒有傳入參數。這一點象sql server或是oracle那樣直觀,而且聲明變數時直接用declare,不用加的@或@@(in out變數除外)。還有一點是很怪的語法,如果是以「select」為開頭的存儲過程,是不能加"begin end"的。"begin end"表示多條SQL語句的復合體。
當然,事實上幾乎沒有哪款資料庫是完全符合SQL3標準的,多少都含有自己的一些成份裡面,這也造成使用存儲過程會使程序的可移性降低。
調用procere
MySQL使用call關鍵字。例:call usp_test('test');而不是execute,同樣()是不能省略的。
創建完procere後,再看看java是如何調用procere的。
Connection conn = null;
CallableStatementcstmt=null;
ResultSetrs=null;
try{
conn=DbConn.getDbConn();//getpoolconn
CallableStatementcstmt=conn.prepareCall("{callusp_test(?)}");
call.setString(1,"test");
rs=call.executeQuery();
while(rs.next()){
Stringte=rs.getString(1);
System.out.println("te:"+te);
}
}catch(Exceptione){
System.out.println("e:"+e);
}finally{
try{
rs.close();
cstmt.close();
conn.close();
}catch(Exceptionex){
System.out.println("ex:"+ex);
}
}
這里使用的是"{call usp_test()}"來調用存儲過程。同時也可以編程傳入參數,進行查詢。
Ⅵ java語言調用mysql存儲過程(需要獲取到存儲過程中的out 變數),
用getObject方法
getObjectObject getObject(int parameterIndex)
throws SQLException以 Java 編程語言中 Object 的形式獲取指定參數的值。如果值為 SQL NULL,則驅動程序返回一個 Java null。
此方法返回一個 Java 對象,其類型對應於使用 registerOutParameter 方法為此參數注冊的 JDBC 類型。通過將目標 JDBC 類型注冊為 java.sql.Types.OTHER,可以使用此方法來讀取特定於資料庫的抽象數據類型。
參數:
parameterIndex - 第一個參數是 1,第二個參數是 2,依此類推
返回:
保存 OUT 參數值的 java.lang.Object
拋出:
SQLException - 如果 parameterIndex 無效;如果發生資料庫訪問錯誤,或者在關閉的 CallableStatement 上調用此方法
Ⅶ 小白求助 通過java對mysql進行操作,運行一次過後,數據都會保存在mysql中么 每個sq
mysql代表的是一個服務。
只要有足夠的許可權,用戶可以在mysql下任意創建資料庫,數據表等。
可以修改任何資料庫,修改任何數據表。
只要硬碟足夠,可以創建無數個庫,無數個表。
影響mysql數據的是mysql的語句,只要沒有語句被執行,mysql的數據就是穩定不變的狀態。
你運行過一次之後,只要不修改,數據在資料庫里是穩定不變的。
Ⅷ java裡面怎麼調用mysql的存儲過程的
java代碼:
Class.forName("com.mysql.jdbc.Driver");
Connectioncon=DriverManager
.getConnection("jdbc:mysql://localhost:3306/test?user=root&password=111111");
Stringsql="{callsel(?)}";
CallableStatementcs=(CallableStatement)con.prepareCall(sql);
cs.execute();
Stringname=cs.getString(1);
System.out.println(name);
創建存儲過程代碼:
dropprocereifexistssel;
createproceresel(outname1varchar(225))
begin
;
end
輸出結果:
Ⅸ java 怎麼調用mysql 存儲過程
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Types;
/*
* 對應的存儲過程
DROP PROCEDURE IF EXISTS `pro_num_user`;
delimiter ;;
CREATE PROCEDURE `pro_num_user`(IN user_name varchar(10) ,OUT count_num INT)
READS SQL DATA
BEGIN
SELECT COUNT(*) INTO count_num FROM tab_user WHERE 'name'=user_name;
END
;;
delimiter ;
*/
public class Test {
public static final String DRIVER_CLASS = "com.mysql.jdbc.Driver";
public static final String URL = "jdbc:mysql://127.0.0.1:3306/test";
public static final String USERNAME = "root";
public static final String PASSWORD = "acbee";
public static void main(String[] args) throws Exception {
test1();
test2();
}
public static void test1() throws Exception
{
Class.forName(DRIVER_CLASS);
Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
String sql = "{CALL pro_num_user(?,?)}"; //調用存儲過程
CallableStatement cstm = connection.prepareCall(sql); //實例化對象cstm
cstm.setString(1, "myd"); //存儲過程輸入參數
//cstm.setInt(2, 2); // 存儲過程輸入參數
cstm.registerOutParameter(2, Types.INTEGER); // 設置返回值類型 即返回值
cstm.execute(); // 執行存儲過程
System.out.println(cstm.getInt(2));
cstm.close();
connection.close();
}
public static void test2() throws Exception
{
Class.forName(DRIVER_CLASS);
Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
String sql = "{CALL pro_number(?,?,?)}"; //調用存儲過程
CallableStatement cstm = connection.prepareCall(sql); //實例化對象cstm
cstm.setInt(1, 2); // 存儲過程輸入參數
cstm.setInt(2, 2); // 存儲過程輸入參數
cstm.registerOutParameter(3, Types.INTEGER); // 設置返回值類型 即返回值
cstm.execute(); // 執行存儲過程
System.out.println(cstm.getInt(3));
cstm.close();
connection.close();
}
}