JDBC开发,数据库的连接
JDBC开发步骤
1.建完工程后,右击工程,new,新建一个文件夹Folder,装jar包,
2.将下载好的驱动包打开,找到jar文件,CTRL+C,选中装jar包的文件夹,CTRL+V,
3.选中添加的jar,右键,Build Path,Add to Build Path
4.新建一个包,再新建一个自定义类
5.注册驱动:Class.forName("com.mysql.jdbc.Driver");throws异常
6.获得链接,
数据库的url:jdbc:mysql://localhost:3306/数据库名
//解决中文乱码:在url中数据库名后加?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE
Connection con = DriverManager.getConnection("");
导包,java.sql,throws异常
7.获得语句执行平台
通过连接对象获取对SQL语句的执行者对象
Statement stm=链接对象.createStatement();
8.执行sql语句
使用执行者对象,向数据库执行SQL语句
获取到数据库的执行后的结果
例子:
package com.oricle.Demo01; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement; public class Demo01 { public static void main(String[] args) throws ClassNotFoundException, SQLException {
/* 1.建完工程后,右击工程,new,新建一个文件夹Folder,装jar包,
* 2.将下载好的驱动包打开,找到jar文件,CTRL+C,选中装jar包的文件夹,CTRL+V,
* 3.选中添加的jar,右键,Build Path,Add to Build Path
* 4.新建一个包,再新建一个自定义类
* 5.注册驱动:Class.forName("com.mysql.jdbc.Driver");throws异常
* 6.获得链接,
* 数据库的url:jdbc:mysql://localhost:3306/数据库名
* //解决中文乱码:在url中数据库名后加?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE
* Connection con = DriverManager.getConnection("");
* 导包,java.sql,throws异常
*
7.获得语句执行平台
通过连接对象获取对SQL语句的执行者对象
Statement stm=链接对象.createStatement();
8.执行sql语句
使用执行者对象,向数据库执行SQL语句
获取到数据库的执行后的结果 *
*/
//1注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2获得链接
String url="jdbc:mysql://localhost:3306/fuxi?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE";
String user="root";
String password="123456";
Connection con=DriverManager.getConnection(url, user, password);
//3获得语句执行平台
Statement stm=con.createStatement();
//4.执行语句
String sql="delete from sort where sid=5";
stm.execute(sql);//增删改
//5.针对于查询操作
//6,先开的后关
stm.close();
con.close(); } }
用集合来装从数据库里面获取的数据
自定义一个类,类名和数据库名一致
package com.oricle.demo01;
public class sort {
private int sid;
private String sname;
private String sdesc;
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getSdesc() {
return sdesc;
}
public void setSdesc(String sdesc) {
this.sdesc = sdesc;
}
@Override
public String toString() {
return "sort [sid=" + sid + ", sname=" + sname + ", sdesc=" + sdesc + "]";
}
}
测试类:
package com.oricle.demo01; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList; public class demo03 { public static void main(String[] args) throws ClassNotFoundException, SQLException {
// 1注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 2获取连接
String url="jdbc:mysql://localhost:3306/fuxi";
String user="root";
String password="123456";
Connection co=DriverManager.getConnection(url, user, password);
// 3获得预处理对象
Statement s=co.createStatement();
// 4 SQL语句占位符设置实际参数
// 5执行SQL语句 String sql="select *from sort";
ResultSet rs=s.executeQuery(sql); //6处理结果集
ArrayList<sort> as=new ArrayList<sort>();//创建集合用来装新建sort对象
//遍历
while(rs.next()){
sort so=new sort();//自定义一个类,类名和数据库名一致,创建对象
so.setSid(rs.getInt("sid"));//把获取当前行的分类id利用set方法存入对象的成员变量中,
so.setSname(rs.getString("sname"));
so.setSdesc(rs.getString("sdesc"));
as.add(so);//把该对象添加到集合as中 }
System.out.println(as);//打印集合里面内容 //7释放资源
rs.close();
s.close();
co.close(); } }
注册驱动
代码:Class.forName("com.mysql.jdbc.Driver");
JDBC规范定义驱动接口:java.sql.Driver,MySql驱动包提供了实现类:com.mysql.jdbc.Driver
DriverManager工具类,提供注册驱动的方法 registerDriver(),方法的参数是java.sql.Driver,所以我们可以通过如下语句进行注册:
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
以上代码不推荐使用,存在两方面不足
- 硬编码,后期不易于程序扩展和维护
- 驱动被注册两次。
通常开发我们使用Class.forName() 加载一个使用字符串描述的驱动类。
如果使用Class.forName()将类加载到内存,该类的静态代码将自动执行。
查询com.mysql.jdbc.Driver源码,发现Driver类“主动”将自己进行注册,重复
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
static {
try {
java.sql.DriverManager.registerDriver(new Driver());//注册
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
……
}
获得链接
代码:Connection con = DriverManager.getConnection
(“jdbc:mysql://localhost:3306/mydb”,”root”,”root”);
获取连接需要方法
DriverManager.getConnection(url,username,password);
三个参数分别表示,url 需要连接数据库的位置(网址) user用户名 password 密码
下面是mysql的url:
jdbc:mysql://localhost:3306/mydb
JDBC规定url的格式由三部分组成,每个部分中间使用冒号分隔。
第一部分是jdbc,这是固定的;
第二部分是数据库名称,那么连接mysql数据库,第二部分当然是mysql了;
第三部分是由数据库厂商规定的,我们需要了解每个数据库厂商的要求,mysql的第三部分分别由数据库服务器的IP地址(localhost)、端口号(3306),以及DATABASE名称(mydb)组成。
获得语句执行平台
String sql = "某SQL语句";
获取Statement语句执行平台:Statement stmt = con.createStatement();
常用方法:
int executeUpdate(String sql); --执行insert update delete语句.
ResultSet executeQuery(String sql); --执行select语句.
boolean execute(String sql); --执行select返回true 执行其他的语句返回false.
SQL注入问题
假设有登录案例SQL语句如下:
SELECT * FROM 用户表 WHERE NAME = 用户输入的用户名 AND PASSWORD = 用户输的密码;
此时,当用户输入正确的账号与密码后,查询到了信息则让用户登录。但是当用户输入的账号为XXX 密码为:XXX’ OR ‘a’=’a时,则真正执行的代码变为:
SELECT * FROM 用户表 WHERE NAME = ‘XXX’ AND PASSWORD =’ XXX’ OR ’a’=’a’;
此时,上述查询语句时永远可以查询出结果的。那么用户就直接登录成功了,显然我们不希望看到这样的结果,这便是SQL注入问题。
为此,我们使用PreparedStatement来解决对应的问题。
package com.oricle.demo01; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner; public class demo05 { public static void main(String[] args) throws ClassNotFoundException, SQLException {
// TODO Auto-generated method stub
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/fuxi";
String user="root";
String password="123456";
Connection co=DriverManager.getConnection(url, user, password);
Scanner sc=new Scanner(System.in);
System.out.println("请输入用户名:");
String uname=sc.next();
System.out.println("请输入密码:");
String pwd=sc.next();
String sql="select * from user where uname=? and pwd=?";
PreparedStatement pst=co.prepareStatement(sql); pst.setString(1, uname);
pst.setString(2,pwd); ResultSet rs=pst.executeQuery(); while(rs.next()){
System.out.println(rs.getString("uname")+"..."+rs.getString("pwd"));
} rs.close();
pst.close();
co.close();
} }
?占位符,插入数据时,用逗号隔开
String sql = "insert into sort(sid,sname) values(?,?)";
JDBC开发,数据库的连接的更多相关文章
- jdbc创建数据库的连接
package com.gylhaut.db; import java.sql.Connection;import java.sql.DriverManager;import java.sql.Res ...
- JDBC获取数据库Connection的工具抽取
使用JDBC获取数据库的连接,大字分为三个步骤 1.获取驱动包名,定义URL,database_username,database_password 2.获取Connection对象 3.利用Conn ...
- 持久化API(JPA)系列(三)实体Bean的开发技术-建立与数据库的连接
在EJB 2.x中.EJB有3种类型的Bean.各自是会话Bean(Session Bean).消息驱动Bean(Message-Driven Bean)和实体Bean(Entity Bean). 随 ...
- Navicat 或者Java的JDBC通过SSH Tunnel连接MySQL数据库
JDBC通过SSH Tunnel连接MySQL数据库 - 明明 - CSDN博客https://blog.csdn.net/a351945755/article/details/21782693 Na ...
- 揭开JDBC的神秘面纱,让JDBC数据库的连接参数不再神秘
1.JDBC是什么? JDBC(Java DataBase Connectivity)java数据库连接 2.JDBC可以做什么? 简单地说,JDBC 可做三件事:与数据库建立连接.发送 ...
- JavaWeb -JDBC使用(数据库-javaweb连接)
使用JDBC四个大类 1. DriverManager:管理jdbc驱动 2. Connection:连接(通过DriverManager产生) 3. Statement/PreparedStatem ...
- mysql数据库无法连接(JDBC)java.net.ConnectException: Connection timed out
数据库无法连接(JDBC) 用户名密码正确,但是一直报错:Connection timed out 后来知道了原因:我用的是BAE提供的云mysql数据库,对访问的IP有限制 ,所以在本机上无法连接. ...
- JDBC(1)简单介绍/数据库的连接
初识JDBC: JDBC是java连接数据库的一个工具,没有这个工具,java将无法和数据库进行连接. JDBC API: JDBC是个“低级”接口,也就是说,他直接用于调用SQL命令. JDBC驱动 ...
- java jdbc与odbc数据库的连接mysql数据库
1.jdbc连接数据库要添加mysql-connector-java-5.1.38-bin.jar库 2.odbc连接数据库要添加odbc数据源 3.测试代码 DBHelper.java代码jdbc连 ...
随机推荐
- MySQL的复制:MySQL系列之十三
一.MySQL复制相关概念 主从复制:主节点将数据同步到多个从节点 级联复制:主节点将数据同步到一个从节点,其他的从节点在向从节点复制数据 同步复制:将数据从主节点全部同步到从节点时才返回给用户的复制 ...
- 如何使用JMETER从JSON响应中提取数据
如果你在这里,可能是因为你需要使用JMeter从Json响应中提取变量. 好消息!您正在掌握掌握JMeter Json Extractor的权威指南.作为Rest API测试指南的补充,您将学习掌握J ...
- deep copy and shallow copy
链接A:浅拷贝就是成员数据之间的一一赋值:把值赋给一一赋给要拷贝的值.但是可能会有这样的情况:对象还包含资源,这里的资源可以值堆资源,或者一个文件..当值拷贝的时候,两个对象就有用共同的资源,同时对资 ...
- Java面向对象_单例设计模式
单例设计模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点 1.构造方法私有化 2.声明一个本类对象 3.给外部提供一个静态方法获取对象实例 两种实现方式:饿汉式和懒汉式 何种情况下使用呢?当 ...
- Unity在Project视图里面显示文件的拓展名
Unity在Project视图里面显示文件的拓展名 功能脚本如下: using System.IO; using System.Reflection; using UnityEngine; using ...
- C# 用正则表达式判断字符串是否为纯数字
Regex regex = new System.Text.RegularExpressions.Regex("^(-?[0-9]*[.]*[0-9]{0,3})$"); stri ...
- JAVA实现向文本文件中多次写入数据
使用这种方式,当指定的文件不存在时会自动创建. //此处设置为true即可追加 FileWriter out = new FileWriter("D:\\1.txt",true); ...
- C#对象和集合初始值设定项
对象初始值设定项 使用对象初始值设定项,你可以在创建对象时向对象的任何可访问字段或属性分配值,而无需调用后跟赋值语句行的构造函数. 利用对象初始值设定项语法,你可为构造函数指定参数或忽略参数(以及括号 ...
- electron 集成 nedb / sqlite3
nedb nedb 无法创建文件 // webpack 构建的前提 externals: process.env.web ? {} : { "nedb": "requir ...
- tomcat7 开机自启动(转)
转自 http://blog.csdn.net/rainyspring4540/article/details/51861079 环境:win7 tomcat7 开机自启动: 使用管理员打开命令提示 ...