程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> 03.JDBC數據庫編程之處理DML語句

03.JDBC數據庫編程之處理DML語句

編輯:DB2教程

03.JDBC數據庫編程之處理DML語句


  1. void
  1. addBatch(String sql) Adds the given SQL command to the current list of commands for this Statement object.
  1. void
  1. clearBatch() Empties this Statement object's current list of SQL commands.
  1. void
  1. close() Releases this Statement object's database and JDBC resources immediately instead of waiting for this to happen when it is automatically closed.
  1. boolean
  1. execute(String sql) Executes the given SQL statement, which may return multiple results.
  1. int[]
  1. executeBatch() Submits a batch of commands to the database for execution and if all commands execute successfully, returns an array of update counts.
  1. ResultSet
  1. executeQuery(String sql) Executes the given SQL statement, which returns a single ResultSet object.
  1. int
  1. executeUpdate(String sql) Executes the given SQL statement, which may be an INSERT, UPDATE, or DELETE statement or an SQL statement that returns nothing, such as an SQL DDL statement.
  1. int
  1. executeUpdate(String sql, String[] columnNames) Executes the given SQL statement and signals the driver that the auto-generated keys indicated in the given array should be made available for retrieval.
  1. boolean
  1. isClosed() Retrieves whether this Statement object has been closed.
  1. boolean
  1. isCloseOnCompletion() Returns a value indicating whether this Statement will be closed when all its dependent result sets are closed.
  1. void
  1. setMaxRows(int max) Sets the limit for the maximum number of rows that any ResultSet object generated by this Statementobject can contain to the given number.
  1. void
  1. setQueryTimeout(int seconds) Sets the number of seconds the driver will wait for a Statement object to execute to the given number of seconds.
一、DML與Statement接口
1.DML(Data manipulation language)
數據庫操作語句,用於添加、刪除、更新和查詢數據庫紀錄,並檢查數據庫的完整性。常用的語句關鍵字主要包括insert、delete、update等。
(1)添加/修改/刪除表數據
增加一行數據:(思想:往哪張表添加?給哪幾行添加值?分別是什麼值?)
   insert  into  表名  (列1,列2,...,列n)   values  (值1,值2...,值n);  
修改某行的列數據:(思想:改哪張表?你需要改幾列的值?分別改為什麼值?在哪些行生效?)
update 表名 set 列1=新值1, 列2=新值2,where expr;
刪除行:(思想:你要刪除哪張表的數據?你要刪掉哪些行?)
delete from 表名 where expr;
查看表數據:
select * from [表名];


(2)修改字段及屬性
修改表(表中的字段類型、字段名、添加字段、刪除字段、修改表名)
①修改表中字段屬性(不能修改字段名)
alter table [表名] modify [字段名] [字段類型] [約束條件] [fisrt|after 列名];
②修改表中字段名及屬性
alter table [表名] change [源字段名] [修改後的字段名] [字段類型] [約束條件] [fisrt|after 列名];
③增加表字段
 alter table [表名] add [字段名] [字段類型] [約束條件] [first|after 列名];
④刪除表字段
alter table [表名] drop [字段名];
注意:[first|after 列名],用於修改字段的排序,其中,after將新增的字段添加在某一字段後;first表示將新建的字段放在該表第一列。
修改表名
命令:alter table [表名] rename to [新表名];


2.Statement接口
用於執行靜態的SQL語句並獲得返回結果的接口,通過Connection中的createStatement方法得到的
即,Statement stmt=conn.createStatement())
參考:http://docs.oracle.com/javase/8/docs/api/index.html
二、JDBC數據庫應用源碼實戰 1.源碼實現 任務:向連接的數據庫中靜態插入一條數據('dongguo',18,97).
import java.sql.*;


/*MySQL數據庫編程
* 實例(2):JDBC處理DML語句*/


public class JDBC_DML {
public static void main(String[] args) {
//0.數據庫URL、數據庫賬戶名稱與密碼
String url = "jdbc:mysql://localhost/jdbc_test_db";
String DBusername="root";
String DBpassword="896013";


//1.加載數據庫驅動程序到Java虛擬機


try{
Class.forName("com.mysql.jdbc.Driver"); //Driver為MySQL驅動類
}catch(ClassNotFoundException e)
{
System.out.println("找不到數據庫驅動程序類,加載驅動失敗!");
e.printStackTrace(); //將異常保存到log日志中
}


//2.創建Connection對象conn,表示連接到MySQL數據庫
Connection conn=null;
Statement stmt=null;
int i;
try{
conn=DriverManager.getConnection(url, DBusername, DBpassword);
//3.獲取能夠實現執行SQL語句的Statement對象
stmt=conn.createStatement();
//4.執行SQL語句,根據返回的int類型數據判斷是否插入成功
i=stmt.executeUpdate("insert into test (name,age,score) values ('dongguo',18,97)");
if(i!=1)
{
System.out.println("更新數據庫失敗!");
}
}catch(SQLException se)
{
System.out.println("連接數據庫失敗");
se.printStackTrace();
}
//6.關閉所有使用的JDBC對象,釋放JDBC資源


if(stmt!=null) //關閉聲明
{
try{
stmt.close();
}catch(SQLException e){
e.printStackTrace();
}
}


if(conn!=null) //關閉數據庫連接
{
try{
conn.close();
}catch(SQLException e){
e.printStackTrace();
}
}
}


}
 運行結果 (1)插入一條記錄 stmt.executeUpdate("insert into test (name,age,score) values ('dongguo',18,97)"); \
(2)刪除一條記錄 stmt.executeUpdate("delete from test where name='JJ'");
\
2.JDBC應用向數據庫動態插入數據 源碼:通過命令行的參數作為插入的數據源,即動態更新數據庫數據
import java.sql.*;
/
*MySQL數據庫編程
* 實例(3):JDBC處理DML語句.通過命令行輸入需要插入到數據庫中的數據*/
public class JDBC_DML2 {
public static void main(String[] args) {
if(args.length!=3) //輸入不正確,非正常退出
{
System.out.println( "Parament Error,Please Input Again!");
System.exit(-1);
}
String nameParam=args[0]; //獲取命令行第一個參數
int ageParam=Integer.parseInt(args[1]); //獲取命令行第二個參數,並轉換為整型
int scoreParam=Integer.parseInt(args[2]);//獲取命令行第三個參數,並轉換為整型


//0.連接數據庫相關參數
String url="jdbc:mysql://localhost:3306/jdbc_test_db"; //數據庫URL(資源定位唯一標識符)
String DBusername="root"; //數據庫用戶名
String DBpasswd="111111"; //數據庫密碼


//1.加載數據庫驅動,將Driver注冊到DriverManager中
try{
Class.forName("com.mysql.jdbc.Driver");
}catch(ClassNotFoundException e){
e.printStackTrace();
}
//2.通過數據庫URL連接到數據庫
Connection conn=null;
Statement stmt=null;
try{
conn=DriverManager.getConnection(url, DBusername, DBpasswd);
//3.獲取Statement對象
stmt=conn.createStatement();
//4.獲取命令參數,並調用Statement對象的executeUpdate更新數據庫
String sql="insert into test(name,age,score) values('"+nameParam+"',"+ageParam+","+scoreParam+")";
System.out.println(sql);//調試
stmt.executeUpdate(sql);


}catch(SQLException e){
e.printStackTrace();
}
//5.釋放JDBC資源
if(stmt!=null) //關閉聲明
{
try{
stmt.close();
}catch(SQLException e){
e.printStackTrace();
}
}


if(conn!=null) //關閉連接
{
try{
conn.close();
}catch(SQLException e){
e.printStackTrace();
}
}
}
}

(1)設置命令行參數 右擊工程->Run as->Open Run Dialog->Main Class選擇"JDBC_DML2" \
(2)運行結果 \
(3)遇到的錯誤與調試 輸入參數運行Java應用後,出現SQLException異常。我們可以通過打印輸入的插入sql語句,發現程序沒有獲取到命令行傳入的參數,另外,vaules拼寫錯誤,找到原因。 修改:sql="insert into test(name,age,score) values('"+nameParam+"',"+ageParam+","+scoreParam+")";即可 \

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved