将JDBC包加入到你的项目里
- 先去官网下载JDBC,JDBC下载地址,选择如下:
- 安装完解压一下,得到一个文件,文件里面有一个tar包,在项目里建一个文件,把那个包放进去
- 此时应该是没有箭头的,你选中,右键,然后添加到库,应该是倒数第三个选项,你自己看一下吧,然后就ok了。
如何连接到数据库
第一种方式
public class SQLconnection01 {
public static void main(String[] args) throws Exception{
//方式一,可以写在配置文件里面
Class clazz=Class.forName("com.mysql.cj.jdbc.Driver");
Driver driver = (Driver) clazz.newInstance();
String url="jdbc:mysql://localhost:3306";
Properties properties = new Properties();
properties.setProperty("user","root");
properties.setProperty("password","123456");
Connection connect = driver.connect(url, properties);
System.out.println(connect);
connect.close();
}
}
第二种及第三种方式
public class SQLconnection002 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//第二种方式,这里他帮我们自动注册Driver
Class.forName("com.mysql.cj.jdbc.Driver");
//第三种方式,可以直接省略Class.forName("com.mysql.cj.jdbc.Driver");
String url="jdbc:mysql://localhost:3306";
String user="root";
String password="123456";
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);
connection.close();
}
}
第四种方式,一定要会的!!
package com.sj.www;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;
--------------通过配置文件的方法连接,有利于后续不用动代码就改相应数据--------------------
public class SQLconnection003 {
public static void main(String[] args) throws Exception {
//第四种,更加灵活的连接数据库,以后就用这个
//第一步,把数据写在配置文件里sql.properties
//第二步,创建properties对象
Properties properties = new Properties();
//获取配置文件地址,下面方法是获取src下的文件绝对路径,并且直接创建一个流对象
// 此方法更加通用,然后加载配置文件。------------------重点------------
InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("sql.properties");
properties.load(inputStream);
//第三步,使用get方法获取
String driver = properties.getProperty("driver");
String user = properties.getProperty("user");
String password = properties.getProperty("password");
String url = properties.getProperty("url");
//然后就正常写连接的语句了
//1、获取类文件夹/这一步可以省略但是为了清晰建议加上
Class.forName(driver);
//2、调用DriverManager的connection(连接)方法-----------重点-----------
Connection connection = DriverManager.getConnection(url, user, password);
//3、下面就可以根据这个连接对象进行sql语句操作了
System.out.println(connection);
//4、关闭连接
connection.close();
}
}
properties文件的内容
url=jdbc:mysql://localhost:3306/bjpowernode
user=root
password=123456
driver=com.mysql.cj.jdbc.Driver
JAVA中执行增删改查
- Insert语句
------------前面的是一样的,我是在获取connection之后写的--------------
String sql="insert into dept(deptno,dname,loc) values(50,'Booker','DALLAS')";
//createStatement(创建语句)
Statement statement =connection.createStatement();
//executeUpdate更新到数据库中
int rows = statement.executeUpdate(sql);
System.out.println("影响行数:"+rows);
//4、关闭连接,语句以及数据库
statement.close();
connection.close();
- update语句
String updatesql="update dept set dname='图书管理员' where deptno=50;";
Statement updatestatement = connection.createStatement();
int updaterows = updatestatement.executeUpdate(updatesql);
System.out.println("影响行数:"+updaterows);
//4、关闭连接,语句以及数据库
updatestatement.close();
connection.close();
- delete语句
//删除语句
String deletesql="delete from dept where deptno=50;";
Statement deletestatement = connection.createStatement();
int updaterows = deletestatement.executeUpdate(deletesql);
System.out.println("影响行数:"+updaterows);
//4、关闭连接,语句以及数据库
deletestatement.close();
connection.close();
- select语句
//查询语句
String selecetsql="select * from emp where SAL>1000";
Statement selectstatement = connection.createStatement();
//该方法返回的是一个结果集对象
ResultSet resultSet = selectstatement.executeQuery(selecetsql);
//处理结果集,现在我们没啥好处理的,就直接遍历输出吧
//next判断当前光标的位置是否有值,它不会自动下移,除非你在调用一次
if(resultSet.next()){
//条件成立表示光标指示的地方有值
//获取当前行的第i个值
//注意JDBC所有地方都是以下标1开始
//不管你是什么值,返回的类型都以string类型取出,当然你可以指定类型
String s1=resultSet.getString(1);
String s2=resultSet.getString(2);
String s3=resultSet.getString(3);
String s4=resultSet.getString(4);
String s5=resultSet.getString(5);
String s6=resultSet.getString(6);
String s7=resultSet.getString(7);
String s8=resultSet.getString(8);
System.out.println(s1+" "+s2+" "+s3+" "+s4+" "+s5+" "+s6+" "+s7+" "+s8);
}
//4、关闭连接,语句以及数据库
resultSet.close();
selectstatement.close();
connection.close();
改进版本,
//查询语句
String selecetsql="select * from emp where SAL>1000";
Statement selectstatement = connection.createStatement();
//该方法返回的是一个结果集对象
ResultSet resultSet = selectstatement.executeQuery(selecetsql);
//处理结果集,现在我们没啥好处理的,就直接遍历输出吧
//next判断当前光标的位置是否有值,它不会自动下移,所以我用while让它一直执行,直到它变为false
while (resultSet.next()){
//条件成立表示光标指示的地方有值
//获取当前行的第i个值
//注意JDBC所有地方都是以下标1开始
//不管你是什么值,返回的类型都以string类型取出,当然你可以指定类型
for (int i = 1; i < 9; i++) {
System.out.print(resultSet.getString(i)+" ");
}
System.out.println();
}
//4、关闭连接,语句以及数据库
resultSet.close();
selectstatement.close();
connection.close();
select查询注意事项
- 上面result.tostring()里面可以是列的名字。以后我们常用的是直接放列名而不是数字,不健壮。
- 注意里面的名字是result结果集中列的名字,不一定是数据库中的列名,因为你可能查的时候,给一个列起了别名,那么你括号里就应该是别名。
注意释放时先释放result,在释放statement,最后释放connection。
巩固练习
声明:我太懒了,就把代码全部粘贴进来,各位见谅!
package com.sj.www;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;
public class SQLconnectiontest02 {
public static void main(String[] args) throws Exception {
//Java中使用jdbc练习1
//--以下皆是读取配置文件信息--
Properties properties = new Properties();
InputStream path = Thread.currentThread().getContextClassLoader().getResourceAsStream("sql.properties");
properties.load(path);
String url = properties.getProperty("url");
String user = properties.getProperty("user");
String password = properties.getProperty("password");
String driver = properties.getProperty("driver");
//--配置文件读取,到此结束--
//--Class.forName(driver);可以不写--
Class.forName(driver);
Connection connection = DriverManager.getConnection(url, user, password);
String sql="select e1.ENAME as '员工姓名',e2.ENAME as '老板姓名' from emp e1 left join emp e2 on e1.MGR=e2.EMPNO";
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql);
System.out.println("员工名:"+"\t"+"老板名:");
while (resultSet.next()){
System.out.println(resultSet.getString("员工姓名")+"\t"+resultSet.getString("老板姓名"));
}
//关闭
resultSet.close();
statement.close();
connection.close();
}
}
package com.sj.www;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;
public class SQLconnectiontest03 {
public static void main(String[] args) throws Exception {
//读取配置文件
Properties properties = new Properties();
InputStream resourceAsStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("sql.properties");
properties.load(resourceAsStream);
//getProperty中文意思:获取属性
String sqlurl = properties.getProperty("url");
String user = properties.getProperty("user");
String password = properties.getProperty("password");
String driver = properties.getProperty("driver");
//--至此配置文件的作用完成--
//此处可以省略,给Java装了一个mysql驱动
Class.forName(driver);
//dirvermanager
Connection connection = DriverManager.getConnection(sqlurl,user,password);
Statement statement = connection.createStatement();
String sql="select DEPTNO, avg(SAL)\n" +
"from emp\n" +
"group by DEPTNO\n" +
"having avg(SAL) > 2500;\n";
System.out.println("找出每个部门的平均薪资,要求显示平均薪资高于2500的");
ResultSet resultSet = statement.executeQuery(sql);
System.out.println("部门号"+"\t"+"平均薪资");
while (resultSet.next()){
System.out.println(resultSet.getString("DEPTNO")+"\t"+resultSet.getString("avg(SAL)"));
}
resultSet.close();
statement.close();
connection.close();
}
}
package com.sj.www;
import java.io.IOException;
import java.io.InputStream;
import java.lang.invoke.VarHandle;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;
public class SQLconnectiontest04 {
public static void main(String[] args) throws Exception {
//练习
//--依旧是读取配置文件--
Properties properties = new Properties();
InputStream resourceAsStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("sql.properties");
properties.load(resourceAsStream);
String sqlurl = properties.getProperty("url");
String user = properties.getProperty("user");
String password = properties.getProperty("password");
String driver = properties.getProperty("driver");
//--以上每个字段都会用到
Class.forName(driver);
Connection connection = DriverManager.getConnection(sqlurl, user, password);
Statement statement = connection.createStatement();
String sql = "select e.ENAME as '员工', e.SAL '薪资',t.DEPTNO as'部门编号'\n" +
"from emp e\n" +
" join (select e.DEPTNO, max(e.SAL) as 'maxsal' from emp e group by e.DEPTNO) t\n" +
" on e.DEPTNO = t.DEPTNO\n" +
"where e.SAL = t.maxsal\n" +
"order by e.SAL asc";
ResultSet resultSet = statement.executeQuery(sql);
System.out.println("员工" +
"\t\t\t" +
"薪资"+"\t\t"+"部门号");
while (resultSet.next()) {
System.out.println(resultSet.getString("员工") + "\t" + resultSet.getDouble("薪资")+"\t" +
resultSet.getInt("部门编号"));
}
resultSet.close();
statement.close();
connection.close();
}
}
package com.sj.www;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;
public class SQLconnectiontest005 {
public static void main(String[] args) throws Exception {
//继续练啊啊啊啊啊啊啊啊啊啊啊
//-首先读取配置文件
Properties properties = new Properties();
InputStream resourceAsStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("sql.properties");
properties.load(resourceAsStream);
String url = properties.getProperty("url");
String user = properties.getProperty("user");
String password = properties.getProperty("password");
String driver = properties.getProperty("driver");
//--结束
Class.forName(driver);
Connection connection = DriverManager.getConnection(url, user, password);
Statement statement = connection.createStatement();
String sql = "select e.ENAME as'员工姓名',e.SAL as'员工薪资',t.平均薪资 as '所在部门平均薪资'\n" +
"from emp e join (select e2.DEPTNO as '部门编号', avg(e2.SAL) as '平均薪资' from emp e2 group by e2.DEPTNO)\n" +
"t on e.DEPTNO=t.部门编号\n" +
"where e.SAL>t.平均薪资";
ResultSet resultSet = statement.executeQuery(sql);
System.out.println("哪些人的薪水在部门的平均薪水之上?");
while (resultSet.next()){
System.out.println(resultSet.getString("员工姓名")+resultSet.getString("员工薪资")+" " +
" "+resultSet.getString("所在部门平均薪资"));
}
resultSet.close();
statement.close();
connection.close();
}
}
package com.sj.www;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;
public class SQLconnectiontest006 {
public static void main(String[] args) throws Exception {
//继续练
//--读取配置文件--
Properties properties = new Properties();
InputStream resourceAsStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("sql.properties");
properties.load(resourceAsStream);
String url = properties.getProperty("url");
String user = properties.getProperty("user");
String password = properties.getProperty("password");
String driver = properties.getProperty("driver");
//----end---
Class.forName(driver);
Connection connection = DriverManager.getConnection(url, user, password);
Statement statement = connection.createStatement();
String sql="select e.DEPTNO as '部门号', avg(s.GRADE) as '平均薪水等级'\n" +
"from emp e\n" +
" left join salgrade s on e.SAL between s.LOSAL and s.HISAL\n" +
"group by e.DEPTNO;";
ResultSet resultSet = statement.executeQuery(sql);
System.out.println("#取得部门中所有人的平均的薪水等级");
while (resultSet.next()){
System.out.println("部门:"+resultSet.getString("部门号")+"\t"+"平均薪资等级:"+resultSet.getString("平均薪水等级"));
}
resultSet.close();
statement.close();
connection.close();
}
}
至于增删改,我就不演示了,比较简单,记住语句结构就行了
update 表名 set 要修改的列名=值 where 具体到哪一行
insert into 表名(各个列名字) values(要插入的每个列的值)
delete from 表名 where 具体的哪一行