前言
本次帶來的是JAVA的JDBC操作,對資料庫進行發送SQL語句,以達到對資料庫語言的增删改查操作 需要下載下傳驅動類包 MySQL資料庫的JDBC驅動包 https://dev.mysql.com/downloads/connector/j/ SQL Server資料庫的JDBC驅動包 https://www.microsoft.com/en-us/download/details.aspx?id=55539
具體步驟
①用反射機制加載驅動類 ②利用TCP對資料庫進行連接配接 ③執行相應的SQL語句 ④關閉連接配接資源
資料庫的操作
添加,删除,更新操作 操作基本差不多
package cn. Himit_ZH. JDBC
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
*
* @ClassName: Demo03
* @Description: JDBC的增删改操作
* @author Himit_ZH
* @date 2020年2月27日
*
*/
public class Demo03 {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement ps = null;
String DbName = "test";//資料庫名字
String Dbusername = "root";//資料庫登陸使用者名 預設為root
String Dbpwd = "123456";//資料庫登陸密碼
try {
//1、加載驅動類
Class.forName("com.mysql.jdbc.Driver");
//2、建立連接配接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/"+DbName,Dbusername,Dbpwd);
//3、設定SQL語句 ?為占位符 不直接書寫實際參數 可以防止SQL注入
String sql1 ="insert into t_user (username,pwd,age) values (?,?,?)"; //插入資料
String sql2 ="delete from t_user where username=?'"; // 删除資料
String sql3 ="update t_user set pwd=? where username=?"; // 修改資料
//建立預處理對象,用statement不安全,會被SQL注入
ps = conn.prepareStatement(sql1);
//可以使用setObject方法處理參數
ps.setObject(1, "Himit_ZH");
ps.setObject(2, 234567);
ps.setObject(3, 18);
// 傳日期 ps.setObject(4, new java.sql.Date(System.currentTimeMillis()));
// 也可以用setString setInt 等等具體的資料類型
//ps.setString(1, "Himit_ZH");
//執行操作,往資料庫發SQL語句,Boolean類型
//boolean f =ps.execute();
//對應DML語句和DDL語句可以用,傳回的是影響資料的條數,int類型
int count = ps.executeUpdate();
System.out.println(count);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally{
//4、關閉資源
try {
if(ps!=null){
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(conn!=null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
複制
查詢操作
package cn. Himit_ZH. JDBC
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
*
* @ClassName: Demo03
* @Description: JDBC的查詢操作
* @author Himit_ZH
* @date 2020年2月27日
*
*/
public class Demo03 {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs =null;
String DbName = "test";//資料庫名字
String Dbusername = "root";//資料庫登陸使用者名 預設為root
String Dbpwd = "123456";//資料庫登陸密碼
try {
//加載驅動類
Class.forName("com.mysql.jdbc.Driver");
//建立連接配接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/"+DbName,Dbusername,Dbpwd);
//設定SQL語句 ?為占位符 不直接書寫實際參數 可以防止SQL注入
String sql = "select id,username,pwd from t_user where id>?"; //?占位符
ps = conn.prepareStatement(sql);
ps.setObject(1, 2); //把id大于2的記錄都取出來
rs = ps.executeQuery();//將查詢到的結果集儲存起來
while(rs.next()){
System.out.println(rs.getInt(1)+"---"+rs.getString(2)+"---"+rs.getString(3));
//System.out.println(rs.getInt("id")+"---"+rs.getString("username")+"---"+rs.getString("pwd"));
//可以索引 也可列名
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally{
//關閉資源
try {
if(rs!=null){
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(ps!=null){
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(conn!=null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
複制
CLOB文本大對象的使用
package cn. Himit_ZH. JDBC
import java.io.Reader;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
*
* @ClassName: Demo09
* @Description: 測試CLOB 文本大對象的使用(純文字檔案)
* @author Himit_ZH
* @date 2020年2月27日
*
*/
public class Demo09 {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
Reader r = null;
try {
//加載驅動類
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","123456");
// ps = conn.prepareStatement("insert into t_user (username,myInfo) values (?,?) ");
// ps.setString(1, "Himit_ZH");
// ps.setClob(2, new FileReader(new File("c:/a.txt"))); //将文本檔案内容直接輸入到資料庫中
//将程式中的字元串輸入到資料庫的CLOB字段中
// ps.setClob(2, new BufferedReader(new InputStreamReader(new ByteArrayInputStream("aaaaa".getBytes()))));
ps = conn.prepareStatement("select * from t_user where id=?");
ps.setObject(1, 101024);
rs = ps.executeQuery();
while(rs.next()){
Clob c = rs.getClob("myInfo");
r = c.getCharacterStream();
/*
* char [] buff = new char[1024]; r.read(buff);
* System.out.println(buff.toString());
*/
int temp = 0;
while((temp=r.read())!=-1){
System.out.print((char)temp);
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if(r!=null){
r.close();
}
} catch (Exception e) {
e.printStackTrace();
}
try {
if(ps!=null){
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(conn!=null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
複制
BLOB 二進制大對象的使用
package cn. Himit_ZH. JDBC
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
*
* @ClassName: Demo10
* @Description: 測試BLOB 二進制大對象的使用 (圖檔 視訊資源大的檔案)
* @author Himit_ZH
* @date 2020年2月27日
*
*/
public class Demo10 {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
InputStream is = null;
OutputStream os = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","123456");
// ps = conn.prepareStatement("insert into t_user (username,headImg) values (?,?) ");
// ps.setString(1, "Himit_ZH");
// ps.setBlob(2, new FileInputStream("c:/icon.jpg"));
// ps.execute();
ps = conn.prepareStatement("select * from t_user where id=?");
ps.setObject(1, 101);
rs = ps.executeQuery();
while(rs.next()){
Blob b = rs.getBlob("headImg");
is = b.getBinaryStream();
os = new FileOutputStream("c:/a.jpg");
int temp = 0;
while((temp=is.read())!=-1){
os.write(temp);
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if(is!=null){
is.close();
}
} catch (Exception e) {
e.printStackTrace();
}
try {
if(os!=null){
os.close();
}
} catch (Exception e) {
e.printStackTrace();
}
try {
if(ps!=null){
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(conn!=null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
複制
MySql和SqlServer操作的差別
具體在驅動類和連接配接有差別 Mysql的是這樣
//1、加載驅動類
Class.forName("com.mysql.jdbc.Driver");
//2、建立連接配接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/"+DbName,Dbusername,Dbpwd);
複制
而SQLserver的是這樣
//1、加載驅動類
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//2、建立連接配接
conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName="+DbName,Dbusername,Dbpwd);
複制
至于其他資料庫大同小異,可自行搜尋