前言
JDBC(Java database connectivity)是 Java 语言中用于执行 SQL 语句的 API(应用程序编程接口),它允许 Java 程序与各种关系型数据库进行交互,为 Java 开发人员提供了一种统一的方式来访问不同类型的数据库。
一、JDBC程序编写步骤
实现基础链接后进行数据查询:
//1.注册操作数据的驱动---反射
Class.forName("com.mysql.cj.jdbc.Driver");
//2.使用api连接数据库(端口:3306 用端口连接数据库,库名:practice)
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/practice?useSSL=false&serverTimezone=UTC","root","123456");
System.out.println("conn = " + conn);
//3.定义查询语句
String sql="select * from practice";
//4.获取查询对象(创建一个用于将 SQL 语句发送到数据库的 Statement 对象)
Statement statement = conn.createStatement();
System.out.println("statement = " + statement);
//5.使用查询对象执行sql
ResultSet resultSet = statement.executeQuery(sql);
System.out.println("resultSet = " + resultSet);
//6.解析数据
while (resultSet.next()){
int sno = resultSet.getInt("sno");
String sname = resultSet.getString("sname");
String ssex = resultSet.getString("ssex");
System.out.println(sno+" | "+sname+" | "+ssex);
}
//7.释放资源(释放连接对象和查询对象)
statement.close();
conn.close();
JDBC编程中使用 ResultSet 对象来处理数据库查询结果时(例如这里的getString),必须先调用 ResultSet 的 next() 方法,将游标移动到第一行(因为游标创建后位于第一行之前),否则会出现Before start of result set异常。
二、数据的更新、插入和删除
这里不再展示代码,与查询不同的是用executeUpdate()方法,查询中是statement.executeQuery()方法。
ResultSet resultSet = statement.executeUpdate(sql);
将以上程序写完后最重要的就是解耦:
1、相同的部分提取出来,封装成一个方法;
2、参数解耦,可以单独定义或者放入属性文件中。
三、检验管理是否合法
public boolean isAdmin(String admin,String passWord) throws Exception {
Connection conn = getConn();//封装好的用于注册驱动、连接数据库的方法
String sql="select * from admins where admin='"+admin+"' and
password='"+passWord+"'";
// select * from admins where admin='aaa' and password='12345'
System.out.println("sql = " + sql);
Statement statement = conn.createStatement();
ResultSet resultSet = statement.executeQuery(sql);
boolean next = resultSet.next();
return next;
}
注意:
1、这样的写法是有sql注入风险的,使用Statement的子类PreparedStatement可以有效解决;
2、在拼接时注意这种sql语句的写法,字段名要加单引号;
2、admin和and中间一定要有空格,否则是错误的sql语句。
public static void main(String[] args) throws Exception {
Scanner scanner = new Scanner(System.in);
Jdbc jdbc = new Jdbc();//动态方法调用要new一个
System.out.println("------欢迎使用,请登录!------");
System.out.println("账户:");
String admin = scanner.next();
System.out.println("密码:");
String passWord = scanner.next();
boolean admin1 = jdbc.isAdmin(admin, passWord);
if(admin1){
System.out.println("已登录");
}else{
System.out.println("账户不存在或密码错误,请重试!");
}
}
四、数据库连接参数独立设置
实现参数解耦,步骤如下:
1、创建一个properties属性文件(配置文件),用于存储应用程序的配置信息,文件的每一行通常遵循 key=value (键-值)的格式

2、将读取配置文件的内容写入无参构造中:
public Jdbc() throws Exception {
Properties properties = new Properties();
FileInputStream fileInputStream = new FileInputStream("src\\resourse.properties");
properties.load(fileInputStream);
user = properties.getProperty("user");
//"user"是配置文件中键的名字,而user是类的成员变量
passWord = properties.getProperty("password");
//"password"是配置文件中键的名字,而passWord的类的成员变量
driver = properties.getProperty("driver");
url = properties.getProperty("url");
}
为什么将这部分内容写入无参构造方法中?
无参构造方法在创建对象时自动执行,在其中读取配置文件内容,能让对象在创建之初就获取到必要的配置信息,完成初始化。
997

被折叠的 条评论
为什么被折叠?



