用idea编写JDBC并获取数据库连接信息

发布于:2022-12-25 ⋅ 阅读:(412) ⋅ 点赞:(0)

1.使用idea创建maven项目

使用Maven管理依赖

使用idea新建Meaven项目(需要在idea中配置Maven),打开idea,打开设置中心,选择maven,并修改为我们自己创建的maven路径和仓库的路径,如图所示

 图中 Maven home directory:指的是maven的安装路径

User settings file :指我们自己配置的文件

Local repository:指Maven本地仓库的位置

新建一个项目,选择当前项目使用的JDK,如果没有就点击new,新建并关联到我们自己安装的JDK上,如图所示

 创建成功后如下

 编写一个JDBC程序

1.添加依赖  以来查询工具 :https://mvnrepository.com/

//pom.xml 中添加如下代码

<?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" 
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   

           xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.alice.mp</groupId> 
    <artifactId>my_maven_pro</artifactId>
    <version>1.0-SNAPSHOT</version> 
    <!-- 这里就是项目所需要的依赖 --> 
    <dependencies> 
        <!-- MYSQL驱动依赖 --> 
        <dependency> 
           <groupId>mysql</groupId> 
           <artifactId>mysql-connector-java</artifactId> 
           <version>8.0.22</version> 
        </dependency>
     </dependencies> 
</project>

2.在src-->main-->java目录下新建包,并创建 JDBCTest.java,并编写一个JDBC程序代码如下:

注意:mysql8的驱动,使用时需要指定时区

package com.niit.dao;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class JDBCTest{
   public static void main(String[] args) throws SQLException {
  Connection conn = null; 
try{
//第一步:加载数据库驱动 
Class.forName("com.mysql.cj.jdbc.Driver");
 //第二步:设置连接数据库所需要的URL、用户、密码 
String url = "jdbc:mysql://localhost:3306/myschool? useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=Asia/S hanghai"; 
String user="root"; 
String pwd = "root";
 //第三步:获取数据库连接对象 
conn =DriverManager.getConnection(url,user,pwd); 
System.out.println("数据库连接成功");
 //第四步:编写SQL语句并执行 
Statement statement = conn.createStatement(); //获取SQL语句 执行对象
 String sql ="select * from student";//student指myschool数据库中student表
 ResultSet rs=statement.executeQuery(sql);
 //执行SQL语句 
//第五步:处理SQL执行结果
 while (rs.next()){ System.out.print("学号="+rs.getObject("StudentNo")); System.out.print(" 姓名="+rs.getObject("StudentName")); 
System.out.print(" 地址 ="+rs.getObject("Address")+"\n"); } }catch (Exception e){ e.printStackTrace(); }finally { 
//第六步:关闭数据库连接资源 

if(conn != null){ 
conn.close(); 
System.out.println("数据库连接已关闭"); 
} } } }


}

3。从database.properties属性文件中,获取数据库连接信息

对于数据库链接信息,是一个经常要更改的内容。经常修改编译很麻烦,我们可以借助属性文件,在不
需要重新编译的情况下就可以更改数据库的连接信息。
1. src-->main-->resource 目录下,创建一份 database.properties 文件,配置文件都放在这里
driver=com.mysql.cj.jdbc.Driver
 url=jdbc:mysql://localhost:3306/myschool? useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=Asia/Sh anghai

user=root 
pwd=root
2. 使用 Properties 类来获取属性文件,改造 JDBCTest.java
import java.io.InputStream;
 import java.sql.*;
 import java.util.Properties;
 /*** 第一个JDBC程序 */
 public class JDBCTest { 
public static void main(String[] args) throws SQLException { 
Connection conn = null; 
try{
//加载文件到流 
InputStream is = JDBCTest.class.getClassLoader().getResourceAsStream("database.properties "); 
Properties prop = new Properties();
//创建属性文件读取对象 
//读取属性文件
 prop.load(is); 
//第二步:设置连接数据库所需要的URL、用户、密码 
String driver =prop.getProperty("driver");
 String url = prop.getProperty("url");
 String user=prop.getProperty("user");
 String pwd = prop.getProperty("pwd"); 
//第一步:加载数据库驱动 
Class.forName(driver); 
//第三步:获取数据库连接对象
 conn =DriverManager.getConnection(url,user,pwd); 
System.out.println("数据库连接成功"); 
//第四步:编写SQL语句并执行 
Statement statement = conn.createStatement();
 //获取SQL语句 执行对象 
String sql ="select * from student"; 
ResultSet rs=statement.executeQuery(sql); 
//执行SQL语句 
//第五步:处理SQL执行结果
 while (rs.next()){ System.out.print("学号="+rs.getObject("StudentNo")); System.out.print(" 姓名="+rs.getObject("StudentName"));
 System.out.print(" 地址 ="+rs.getObject("Address")+"\n"); } }
catch (Exception e){
 e.printStackTrace();
}finally { 
//第六步:关闭数据库连接资源 
if(conn != null){
 conn.close();
 System.out.println("数据库连接已关闭");
 }
 } 
} 
}

4.封装JDBC工具类   JDBCUtil.java

为什么需要封装工具类:
提高代码的利用率
减少资源浪费
//JDBCUtil.java中的代码
 import java.io.InputStream; 
import java.sql.Connection;
 import java.sql.DriverManager; 
import java.sql.SQLException; 
import java.util.Properties; 
/*** JDBC连接数据库的工具类 */
 public class JDBCUtil { 
private static Connection conn=null; 
private static String driverName; 
private static String url; 
private static String userName; 
private static String password; 
/*** 使用静态代码块的方式,使得数据库的连接信息在工具类加载的时候就获取并赋值 */ 
static{ try {//第二步:定义数据库连接信息 
InputStream is=JDBCTest.class.getClassLoader().getResourceAsStream("database.properties"); 
//使用Properties类来读取属性文件中对应的值
 Properties prop = new Properties(); 
//把输入流中的信息加载到Properties的对象 
prop.load(is); 
driverName = prop.getProperty("driverName"); 
url = prop.getProperty("url"); 
userName = prop.getProperty("userName"); 
password = prop.getProperty("password"); 
//获取数据库的连接
 //第一步:加载数据库驱动 
Class.forName(driverName); 
} catch (Exception e)
{ e.printStackTrace();
 } }
/*** 获取数据库的连接对象 * @return * @throws SQLException */ 
public static Connection getConnection() throws SQLException { /
/为了让整个应用程序有且只有一个数据库连接对象 ---单例模式
 if(conn == null)
{ conn = DriverManager.getConnection(url,userName,password); 
}
return conn; 
}
public static void closeConnection(Connection conn) throws SQLException { if(conn != null)
 conn.close(); } }
SQL 注入问题 preparedStatement
SQL 注入:
用户通过输入框传递一些非法语句导致 sql 在执行的时候,非法拼接了,从而使得系统无法进行安
全校验,
//使用preparedStatement之前
 @Test
public void testLogin() throws SQLException { Connection conn =null; 
String sNo = "1005 or 1=1 ";
//这是一个错误的用户名 
String pwd = "123456";
 try{
//获取数据的连接对象 
conn = JDBCUtil.getConnection(); 
//获取SQL的执行对象 
//执行SQL 判断登录,,用户名和密码同时存在,就允许登录 使用statement时 候的sql 语句 
String sql = "select * from student where StudentNo = "+sNo+" and LoginPwd ="+pwd; Statement st = conn.createStatement(); ResultSet rs = st.executeQuery(sql);
 //第五步:处理数据库返回的结果
 if(rs.next()){ 
System.out.println("登录成功");

} }
catch (Exception e)
{ e.printStackTrace(); 
}
finally { JDBCUtil.closeConnection(conn);
 } } 
//使用preparedStatement之后
 @Test
public void testLogin() throws SQLException { Connection conn =null; 
String sNo = "1005 or 1=1 ";
//这是一个错误的用户名 
String pwd = "123456";
 try{
//获取数据的连接对象
 conn = JDBCUtil.getConnection(); 
//获取SQL的执行对象 
//使用PreparedStatement 
使用使用的SQl语句 
String sql = "select * from student StudentNo = ? and LoginPwd = ?"; 
PreparedStatement ps = conn.prepareStatement(sql); 
ps.setString(1,sNo); 
//给第一个?传递参数
 ps.setString(2,pwd);
//给第二个?传递参数
 ResultSet rs = ps.executeQuery();
 //第五步:处理数据库返回的结果 
if(rs.next()){ System.out.println("登录成功");
 } }
catch (Exception e)
{ e.printStackTrace();
 }finally {
 JDBCUtil.closeConnection(conn); } }


网站公告

今日签到

点亮在社区的每一天
去签到

热门文章