注意,不同的版本的jar包,在连接时可能存在差异
第一步创建数据库
注意:该表u在数据库db6中
CREATE TABLE u(
id INT AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(20),
PASSWORD VARCHAR(20) )ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO u VALUES(1,'wzm','111111');
INSERT INTO u VALUES(NULL,'zcc','222222');
INSERT INTO u VALUES(NULL,'张三','333333');
第二步创建项目
第三部
在所生成的项目模块创建一个目录,放jar包
这里设置名称为libs
复制jar包,注意这里使用的jar版本。不同版本在后续连接可能存在差异
点击确定后创建成功,在右击libs,点击添加为库,点击确认
注意,添加的模块
第四步,写代码,这里小编写了3个类和一个配置文件
例题:登录程序要求:
- 打印所有数据库成员信息
- 查询是否存在
user类
/*
*@Student 张策
*/
public class user {//创建user类储存从数据库中提取的数据,将来
private int id;//存入集合打印遍历集合即可完成要求一
private String name;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "u{" +
"id=" + id +
", name='" + name + '\'' +
", password=" + password +
'}';
}
}
主程序:Text1
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/*
*@Student 张策
*/
public class Text1 {
public static void main(String[] args) {
List<user> findall = new Text1().findall();//创建对象,调用方法,返回集合。
System.out.println(findall);//打印集合
Scanner scanner = new Scanner(System.in);//输入
System.out.println("请输入用户名");
String name = scanner.nextLine();//输入
System.out.println("请输入密码");
String password = scanner.nextLine();
if(login(name, password)){//下方创建将login方法,bollean类型
System.out.println("登录成功");
}else {
System.out.println("登录失败");
}
}
public static boolean login(String name,String password){
if(name==null||password==null){//判断输入是否合理
return false;
}
Connection conn=null;//定义了一个Connection对象,名为conn,初始值为null。Connection对象代表数据库连接。
PreparedStatement pre=null;//定义了一个PreparedStatement对象,名为pre,初始值为null。PreparedStatement对象用于执行预编译的SQL语句。
ResultSet resultSet=null;//定义了一个ResultSet对象,名为resultSet,初始值为null。ResultSet对象存储了从数据库查询返回的结果集。
try {
conn = JDBCUtils.getConnection();//调取下方创建的JDBCUtils类中的方法,返回
String sql="SELECT * FROM u WHERE NAME=? AND PASSWORD=?";//编写SQL语句
pre= conn.prepareStatement(sql);//使用Connection对象conn的prepareStatement方法创建一个PreparedStatement对象,并将SQL查询语句作为参数传入。
pre.setString(1,name);//调用PreparedStatement对象的setString方法设置第参数的值,这里的1表示参数的位置,name是要设置的值。
pre.setString(2,password);//同上
resultSet = pre.executeQuery();//调用PreparedStatement对象的executeQuery方法执行查询,并将返回的结果集赋值给ResultSet对象resultSet。
return resultSet.next();//调用ResultSet对象的next方法判断结果集中是否有下一条记录,如果有则返回true,否则返回false。
} catch (SQLException e) {
e.printStackTrace();
}finally {
JDBCUtils.close(resultSet,pre,conn);//调用下方的的JDBCUtils类关闭空间
}
return false;
}
public static List<user> findall(){//将数据库的数据存入集合中并且返回集合
List<user> list = new ArrayList<>();
Statement statement=null;//定义了一个Statement对象,名为statement,初始值为null。Statement对象用于执行SQL语句。和PreparedStatement 类似
//这里仅仅演示Statement ,建议使用上方的PreparedStatement
ResultSet re=null;
Connection connection=null;
try {
//2.获取数据库连接对象
connection = JDBCUtils.getConnection();
//3.定义sql语言
String mysql="select*from u";
//获取执行sql的对象 statement
statement = connection.createStatement();
//执行sql
re = statement.executeQuery(mysql);
user acc=null;
while (re.next()){ //如果存在就返回true并且指针指向数据库的下一个数据
int anInt = re.getInt("id");//依次提取数据库中的id,name,password列
String string = re.getString("name");
String anInt1 = re.getString("password");
acc = new user();//创建一个对象储存每一个用户
acc.setId(anInt);//依次将提取的数据,设置为上面刚建立的对象的属性
acc.setName(string);
acc.setPassword(anInt1);
list.add(acc);//将对象存入集合
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
JDBCUtils.close(re,statement,connection);//关闭
}
return list;
}
}
工具类JDBCUtils :写有,关闭数资源,连接数据库的操作
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;
/*
*@Student 张策
*/
public class JDBCUtils {
private static String url;
private static String user;
private static String password;
private static String driver;
static {//静态代码块,用于读取下方配置文件的数据
try {
Properties properties=new Properties();
ClassLoader classLoader = JDBCUtils.class.getClassLoader();
URL resource = classLoader.getResource("jdbc.properties");
String path = resource.getPath();
properties.load(new FileReader(path));
url=properties.getProperty("url");
user=properties.getProperty("user");
password=properties.getProperty("password");
driver=properties.getProperty("driver");
Class.forName(driver);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {//连接数据库,调用了静态代码块读取的属性
return DriverManager.getConnection(url,user,password);
}
public static void close(Statement statement,Connection connection){//第一个关闭资源的方法,下方还有一个重载的
if(statement!=null){
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(connection!=null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//关闭资源方法
public static void close(ResultSet resultSet,Statement statement, Connection connection){
if(resultSet!=null){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(statement!=null){
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(connection!=null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
配置文件jdbc.properties
url=jdbc:mysql:///db6?useSSL=false&characterEncoding=utf8
//db6表示数据库的名字.
//useSSL=false这部分是用来指定是否使用SSL(Secure Socket Layer)加密连接到MySQL数据库的。
//将useSSL=false包含在连接URL中表示不使用SSL加密连接。
//characterEncoding=utf8 保证在数据库和Java代码中,需要保证字符编码方式一致
//如果你确信你的MySQL数据库不需要通过SSL加密连接,那么useSSL=false是一个合适的设置。这可以帮助简化连接配置,并且在某些情况下(例如本地开发环境)可能更方便。
user=root
//MySQL数据库名称
password=
//MySQL的密码
driver=com.mysql.jdbc.Driver
//驱动
随后运行Text1