Java连接数据库

Java连接数据库 --- 主推预编译Statement

准备工作   1.创建数据库

                 2.导入jar包    我使用的是  mysql-connector-java-5.1.8-bin.jar

简单的插入数据

方法一:预编译Statement

try {
	/**
	 * 通过Class.forName 初始化驱动类com.mysql.jdbc.Driver
	*/
    Class.forName("com.mysql.jdbc.Driver");
	/*
	 * 连接数据库  信息,用户,密码 
	*/
	Connection c = DriverManager.getConnection("jdbc:mysql://localhost:3306/login?characterEncoding=UTF-8","root","123456");
	System.out.println("数据库连接成功"+c);
	/**
	* 方法1:预编译Statement
	* PreparedStatement 执行10次,只需要1次把SQL语句传输到数据库端
    * 数据库对带?的SQL进行预编译
    * 每次执行,只需要传输参数到数据库端
    * 1. 网络传输量比Statement更小
    * 2. 数据库不需要再进行编译,响应更快
    * 3. 杜绝注入式攻击
	*/
	String sql = "insert into user values(null,?,?)";
	PreparedStatement pStatement = c.prepareStatement(sql);
    //设置数据
    //传入多组数据用for循环
	pStatement.setString(1, "zhansan");
	pStatement.setString(2, "zhansan123456");
    //执行
	pStatement.execute();
}catch (SQLException e) {
    // TODO Auto-generated catch block
	e.printStackTrace();
}catch (ClassNotFoundException e) {
	e.printStackTrace();
} 

方法二:statement

try {
	/**
	* 通过Class.forName 初始化驱动类com.mysql.jdbc.Driver
	*/
	Class.forName("com.mysql.jdbc.Driver");
	/*
	* 连接数据库  信息  ,用户,密码 
	*/
	Connection c = DriverManager.getConnection("jdbc:mysql://localhost:3306/login?characterEncoding=UTF-8","root","123456");
	System.out.println("数据库连接成功"+c);
	/*创建Statement 用于执行sql语句*/
	Statement s = c.createStatement();
	System.out.println("获取 Statement对象: " + s);
	/**
	* 插入语句数据  注意这里插入到表名user哦,别再是数据库名
	*/ 
    //拼接sql语句
	String sqlString = "insert into user values(null,"+"'rendonglin'"+","+"'123456789'"+")"; 
	//String deleteString = "删除语句";
	//String updateString = "修改语句";
	s.execute(sqlString);
}catch (SQLException e) {
	// TODO Auto-generated catch block
	System.out.println("数据库异常");
}catch (ClassNotFoundException e) {
	System.out.println("连接失败");
}

查询数据库所有数据并打印


//接在 Statement s = c.createStatement(); 后面即可
/**
* 查询语句,查询所有信息并打印	
*/
String selectString = "select * from user";
ResultSet rs = s.executeQuery(selectString);
while(rs.next()){
	int id = rs.getInt("id"); //可以使用字段名
	String accountString = rs.getString(2); //可以使用字段顺序
	String passwordString = rs.getString(3);
	System.out.printf("%d\t%s\t%s\n",id,accountString,passwordString);
}

验证账号密码

/**
* 校验账号密码正确,避免将数据库里的数据全部传到内存中,直接在数据库里面校验
*/
String account = "zhangyi";
//正确的密码是:123456789
String password = "0123456789";
String sql = "select * from user where account = '" + account +"' and password = '" + password+"'";
ResultSet rs = s.executeQuery(sql);
if(rs.next())
    System.out.println("账号密码正确");
else 
    System.out.println("账号密码错误");

关闭数据库

//但是得提前定义s,c;即
//Connection c = null;
//Statement s = null;
finally {
      // 数据库的连接时有限资源,相关操作结束后,养成关闭数据库的好习惯
      // 先关闭Statement
      if (s != null)
          try {
               s.close();
          } catch (SQLException e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
          }
      // 后关闭Connection
      if (c != null)
          try {
               c.close();
          } catch (SQLException e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
          }
 
        }

使用事务

/*
在Mysql中,只有当表的类型是INNODB的时候,才支持事务,所以需要把表的类型设置为INNODB,否则无法观察到事务.
修改表的类型为INNODB的SQL: 
alter table hero ENGINE  = innodb;
查看表的类型的SQL 
show table status from how2java;
*/ 

// 有事务的前提下
// 在事务中的多个操作,要么都成功,要么都失败 
//操作介绍  hp 先 +1,再 -1
c.setAutoCommit(false);
  
String sql1 = "update hero set hp = hp +1 where id = 22";
s.execute(sql1);
  
// 不小心写错写成了 updata(而非update)
  
String sql2 = "updata hero set hp = hp -1 where id = 22";
s.execute(sql2);
  
// 手动提交
c.commit();

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值