jdbc连接mysql数据库和基本的CRUD(创建、读取、更新、删除)

首先我们来看一个例子:

package duniang;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class jdbctext {

	public static void main(String[] args) throws SQLException {
		// TODO Auto-generated method stub
		//1.加载驱动
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		//2.连接数据库
		Connection conn = DriverManager.getConnection("jdbc:mysql:///baidu", "root", "123456");

		//3.创建statement
		Statement st = conn.createStatement();

		//4.执行查询 
		ResultSet rs = st.executeQuery("select * from chaxun where title like '%新乡%'");

		//5.遍历结果集,逐行遍历
		while(rs.next()) {
			//获取指定列的值 
			int id = rs.getInt("id");
			String title = rs.getString("title");
			String content = rs.getString("content");
			String url = rs.getString("url");
			System.out.println(id + ","+title+","+content+","+url);
						}
	}

}

连接的MySQL数据库为:

执行程序后结果为:

这样就实现了把数据库中的内容读出来展示在控制台的效果。

那么jdbc究竟要怎么样才能读取数据库中的数据呢?

连接数据的步骤

1.注册驱动 (只做一次)
2.建立连接(Connection)
3.创建执行SQL的语句(Statement)
4.执行语句
5.处理执行结果(ResultSet)
6.释放资源

一、注册驱动:

1.Class.forName(“com.mysql.jdbc.Driver”);
    推荐这种方式,不会对具体的驱动类产生依赖。
2.DriverManager.registerDriver(com.mysql.jdbc.Driver);
    会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖。
3.System.setProperty(“jdbc.drivers”, “driver1:driver2”);
    虽然不会对具体的驱动类产生依赖;但注册不太方便,所以很少使用。
驱动类型(四种类型)

二、建立连接(Connection)

1.Connection conn = DriverManager.getConnection(url, user, password);
2.url格式:
    JDBC:子协议:子名称//主机名:端口/数据库名?属性名=属性值&…
User,password可以用“属性名=属性值”方式告诉数据库;
其他参数如:useUnicode=true&characterEncoding=GBK。

三、创建执行SQL的语句(Statement)

1.Statement
     Statement st = conn.createStatement();
    st.executeQuery(sql);
2.PreparedStatement
    String sql = “select * from table_name where col_name=?”;
    PreparedStatement ps = conn.preparedStatement(sql);
    ps.setString(1, “col_value”);
    ps.executeQuery();

四、处理执行结果(ResultSet)

ResultSet rs = statement.executeQuery(sql);
While(rs.next()){
    rs.getString(“col_name”);
    rs.getInt(“col_name”);
    //…
}


五、释放资源

1.释放ResultSet, Statement,Connection.
2.数据库连接(Connection)是非常稀有的资源,用完后必须马上释放,如果Connection不能及时正确的关闭将导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。

 

 

基本的CRUD(创建、读取、更新、删除)

数据处理模板代码
Connection conn = null;
Statement st=null;
ResultSet rs = null;
try {
    //获得Connection
    //创建Statement
    //处理查询结果ResultSet
} finally {
    //释放资源ResultSet, Statement,Connection
}

模板代码 
Connection conn = null;
Statement st=null;
ResultSet rs = null;
try {
	//获得Connection
	//创建Statement
	//处理查询结果ResultSet
} finally {
	//释放资源ResultSet, Statement,Connection
}

1.创建:

增加对应SQL的INSERT,返回增加成功的行(记录)数
    conn = getConnection();
    Statement st = conn.createStatement();
    String sql=“insert into user(name, age,regist_date )” +          “values(‘name’, 10, now())”;
    int i = st.executeUpdate(sql);
    //i为插入的记录数


2.读取:

读取(查询)对应SQL的SELECT,返回查询结果
conn = getConnection();
st = conn.createStatement();
String sql = "select id, name, age,regist_date from user";
rs = st.executeQuery(sql);
while (rs.next()) {
        System.out.print(rs.getInt("id") + " \t\t ");
        System.out.print(rs.getString("name") + " \t\t ");
        System.out.print(rs.getInt("age") + " \t\t ");
        System.out.print(rs.getTimestamp("regist_date") + " \t\t ");
        System.out.println();
}
3.更新:

更新(修改)对应SQL的UPDATE,返回被修改的行(记录)数
conn = getConnection();
Statement st = conn.createStatement();
String sql=“update person set name='new name‘”;
int i = st.executeUpdate(sql);
//i为符合条件的记录数


4.删除:

删除对应SQL的DELETE,返回被删除的行(记录)数
conn = getConnection();
Statement st = conn.createStatement();
String sql=“delete from user where id=1”;
int i = st.executeUpdate(sql);
//i为删掉的记录数


总结:增、删、改用Statement.executeUpdate来完成,返回整数(匹配的记录数),这类操作相对简单。
查询用Statement.executeQuery来完成,返回的是ResultSet对象,ResultSet中包含了查询的结果;查询相对与增、删、改要复杂一些,因为有查询结果要处理。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值