JDBC数据库的增删改查简单操作

前言

本次带来的是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);

至于其他数据库大同小异,可自行搜索

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值