首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

重点JDBC的使用

java数据库连接 java database connectivity

期望使用统一的一套Java代码可以操作所有的关系型数据库

本质:sun公司定义的一套操作所有关系型数据库的接口。

使用步骤:

1.导入jar包(先创建文件夹lib,一般用来存储jar包)add as liabry

3.获取数据库连接对象Connection

4.定义sql

5.获取执行sql语句的对象Statement

6.执行sql,接受返回对象

7处理结果

8释放资源

importjava.sql.Connection;

importjava.sql.DriverManager;

importjava.sql.SQLException;

importjava.sql.Statement;

public classJdbcDemo1 {

public static voidmain(String[] args)throws

ClassNotFoundException,SQLException {

//1.加载驱动进内存

Class.forName("com.mysql.jdbc.Driver");

//2.建立连接

Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbjob","root","admin");

//localhost位置是主机ip,因为ip是本机,所以直接写localhost

//3.获取执行sql语句对象

Statement state = con.createStatement();

//4.执行sql语句

inti =state.executeUpdate("insertinto job values(6,'秘书','看手机');");

System.out.println(i);

//5.释放资源

state.close();

con.close();

}

}

ResultSet:结果集对象,封装查询结果

boolean next(): 游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据),如果是,则返回false,如果不是则返回true

getXxx(参数):获取数据

Xxx:代表数据类型 如: int getInt() , String getString()

参数:

1.int:代表列的编号,从1开始 如:getString(1)

2.String:代表列名称。 如: getDouble("balance")

使用步骤:

1. 游标向下移动一行

2. 判断是否有数据

3. 获取数据

使用ResultSet结果集:

importjava.sql.*;

public classJdbcDemo3 {

public static voidmain(String[]args) {

Connection con =null;

Statement state =null;

ResultSet resultSet =null;

try{

Class.forName("com.mysql.jdbc.Driver");

con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db03","root","admin");

state = con.createStatement();

String sql ="select*from job";

resultSet = state.executeQuery(sql);

while(resultSet.next()){

intid =resultSet.getInt(1);

String jname = resultSet.getString(2);

String description = resultSet.getString(3);

System.out.println(id +"=="+jname+"=="+description+"==");

}

}catch(ClassNotFoundExceptione) {

e.printStackTrace();

}catch(SQLException e) {

e.printStackTrace();

}finally{

if(resultSet!=null){

try{

resultSet.close();

}catch(SQLException e) {

e.printStackTrace();

}

}

if(state!=null){

try{

state.close();

}catch(SQLException e) {

e.printStackTrace();

}

}

if(con!=null){

try{

con.close();

}catch(SQLException e) {

e.printStackTrace();

}

}

}

}

}

抽取JDBC工具类 :JDBCUtils

目的:简化书写

分析:

1.注册驱动也抽取

2.抽取一个方法获取连接对象

需求:不想传递参数(麻烦),还得保证工具类的通用性。

解决:配置文件中

url=jdbc:mysql://localhost:3306/da03

user=root

password=admin

driver=com.mysql.jdbc.Driver

3.抽取一个方法释放资源

jdbc工具类代码如下:

packageUtil;

importjava.io.IOException;

importjava.io.InputStream;

importjava.sql.*;

importjava.util.Properties;

public classJDBCUtil {

private staticStringurl;

private staticStringuser;

private staticStringpassword;

private staticStringdriver;

static{

try{

Properties pro =newProperties();

ClassLoader classLoader = JDBCUtil.class.getClassLoader();

InputStream is = classLoader.getResourceAsStream("JdbcUtil.properties");

//加载文件

pro.load(is);

//获取数据,赋值

url= pro.getProperty("url");

user=pro.getProperty("user");

password= pro.getProperty("password");

driver=pro.getProperty("driver");

//注册驱动

Class.forName(driver);

}catch(IOException e) {

e.printStackTrace();

}catch(ClassNotFoundException e) {

e.printStackTrace();

}

}

/**

*获取连接

*@return

*@throwsSQLException

*/

public staticConnectiongetConnection()throwsSQLException{

returnDriverManager.getConnection(url,user,password);

}

/**

*释放资源

*@paramrs

*@paramstmt

*@paramconn

*/

public static voidclose(ResultSetrs,Statement stmt,Connection conn){

if( rs!=null){

try{

rs.close();

}catch(SQLException e) {

e.printStackTrace();

}

}

if(stmt !=null){

try{

stmt.close();

}catch(SQLException e) {

e.printStackTrace();

}

}

if(conn !=null){

try{

conn.close();

}catch(SQLException e) {

e.printStackTrace();

}

}

}

}

5. PreparedStatement:执行sql的对象

1.SQL注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接。会造成安全性问题,输入密码:a' or 'a' = 'a

2.解决sql注入问题:使用PreparedStatement对象来解决

3.预编译的SQL:参数使用?作为占位符

注意:

1.sql的参数使用?作为占位符。

如:select * from user where username = ? and password = ?;

2.获取执行sql语句的对象 PreparedStatement Connection.prepareStatement(String sql)

3.给?赋值:

方法: setXxx(参数1,参数2)

参数1:?的位置编号 从1 开始

参数2:?的值

4.执行sql,接受返回结果,不需要传递sql语句

5.使用PreparedStatement来完成增删改查的所有操作

1.可以防止SQL注入

2.效率更高

importUtil.JDBCUtils;

importjava.sql.Connection;

importjava.sql.PreparedStatement;

importjava.sql.ResultSet;

importjava.sql.SQLException;

importjava.util.Scanner;

public classJdbcDemo7 {

public static voidmain(String[]args){

Scanner sc =newScanner(System.in);

System.out.println("输入用户名");

String username = sc.nextLine();

System.out.println("输入密码");

String password = sc.nextLine();

booleanb =newJdbcDemo7().login2(username,password);

if(b){

System.out.println("登陆成功");

}else{

System.out.println("登陆失败");

}

}

public booleanlogin2(String username,String password){

if(username==null|| password ==null){

return false;

}

ResultSet rs =null;

PreparedStatement prepar =null;

Connection conn =null;

try{

conn = JDBCUtils.getConnection();

String sql ="select*from login where username = ? and password= ?";

prepar = conn.prepareStatement(sql);

//给?赋值

prepar.setString(1,username);

prepar.setString(2,password);

//执行查询

rs = prepar.executeQuery();

returnrs.next();

}catch(SQLException e) {

e.printStackTrace();

}finally{

JDBCUtils.close(rs,prepar,conn);

}

return false;

}

}

如果你觉得这个公众号不错,保存下面二维码,分享给你的好友吧!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180928G22ECU00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券