Java要连接数据库,那么首先你必须安装mysql数据库。
安装好mysql之后,安装JDK了。
安装好JDK之后,就是安装Eclipse了,要支持JDK版本,Eclipse安装的时候会自动去找JDK安装位置的,解压版的Eclipse,就要配置eclipse.ini文件了,将对应的JDK配置好,这些已经准备就绪的时候,就到mysql中创建数据库和表。
先创建数据库:
CREATE DATABASE SCUTCS
接着,创建表:
CREATE TABLE STUDENT
(
SNO CHAR(7) NOT NULL,
SNAME VARCHAR(8) NOT NULL,
SEX CHAR(2) NOT NULL,
BDATE DATE NOT NULL,
HEIGHT DEC(5,2) DEFAULT 000.00,
PRIMARY KEY(SNO)
)
然后插入数据,可以用SQL语句insert into <表名>values (value1, value2, ...)
编写.java文件来演示一下如何访问MySQL数据库。
import java.sql.*
public class JDBCTest {
public static void main(String[] args){
// 驱动程序名 String driver = "com.mysql.jdbc.Driver"
// URL指向要访问的数据库名scutcs String url = "jdbc:mysql://127.0.0.1:3306/scutcs"
// MySQL配置时的用户名 String user = "root" // MySQL配置时的密码 String password = "root"
try { // 加载驱动程序 Class.forName(driver)
// 连续数据库 Connection conn = DriverManager.getConnection(url, user, password)
if(!conn.isClosed()) System.out.println("Succeeded connecting to the Database!")
// statement用来执行SQL语句 Statement statement = conn.createStatement()
// 要执行的SQL语句 String sql = "select * from student"
// 结果集 ResultSet rs = statement.executeQuery(sql)
while(rs.next()) // 选择sname这列数据 name = rs.getString("sname
// 输出结果 System.out.println(rs.getString("sno") + "\t" + name) }
rs.close() conn.close()
} catch(ClassNotFoundException e) {
System.out.println("Sorry,can`t find the Driver!") e.printStackTrace()
} catch(SQLException e) {
e.printStackTrace()
} catch(Exception e) {
e.printStackTrace()
} } }
使用java连接MySQL数据库与其他的数据库连接核心是一样的,如果说区别,那就是所需的驱动不一样。
工具/原料
MySQL、JDK
方法/步骤
1、首先需要安装好JDK(配置环境变量),如图所示:
2、其次要安装好MySQL数据库,可以使用可视化Navicar For MySQL,如图所示:
3、最后通过代码进行连接。
(1)确定连接路径URL:
String url="jdbc:mysql://localhost(可以是本机IP地址):3306(端口号)/mysqltest(数据库名称)?"+"user=用户账号&password=用户密码&useUnicode=字符编码"
(2)加载驱动:
Class.forName("com.mysql.jdbc.Driver")
(3)连接,获取Connection对象
Connection conn=DriverManager.getConnection(url)
(4)可以通过conn对象检验连接与否。
javaDB其实就是Derby,它并不是一个新的数据库产品,它是由IBM捐献给Apache的DB项目的一个纯Java数据库,JDK6.0里面带的这个Derby的版本是 10.2.1.7,支持存储过程和触发器有两种运行模式,一种是作为嵌入式数据库,另一种是作为网络数据库,前者的数据库服务器和客户端都在同一个 JVM里面运行,后者允许数据库服务器端和客户端不在同一个JVM里面,而且允许这两者在不同的物理机器上.值得注意的是JDK6里面的这个Derby支持JDK6的新特性JDBC 4.0规范(JSR 221),现在我们如果要练习JDBC的用法,没有必要单独装一个数据库产品了,直接用Derby就行.1、本身没有 *** 作界面,可以用第三方工具来管理(也就是你说的 *** 作界面),Aqua Data Studio 具备管理功能的用于 Apache Derby 关系数据库的管理工具和数据库查询工具。直观管理功能让用户能够浏览和修改数据库结构,包括架构对象和数据库存储,以及维护数据库安全。集成查询工具让您能够迅速创建、编辑和执行 SQL 查询与脚本。Aqua Data Studio 进一步提供导入与导出工具,从而轻松地将数据移入和移出不同的数据格式及 Apache Derby 数据库。集成在这些工具内的是库浏览器 (Repository Browser),拥有 CVS 和 Subversion (SVN) 的完整来源控制客户端。
2、两者的区别,简单的说,就是javaDB是一个简化轻量级数据库,适合小型系统的小规模测试用,完全可以跑在内存里的数据库,它只有3M大小,而MySQL则是可以应用部署大型系统的数据库,功能更多更全,也更稳定,是用范围更广。
3、下面是个使用derby的简单例子:
首先导入JAR包:derby.jar,如果你装的是JDK6,在C:\Program Files\Sun\JavaDB\lib目录下就可以找到.
然后就要创建数据库了:
代码
private Connection getConnection() throws SQLException {
Connection connection = DriverManager
.getConnection("jdbc:derby:userDBcreate=trueuser=testpassword=test")
connection.setAutoCommit(false)
return connection
}
其中userDB是要连接数据库的名字,create=true表示如果该数据库不存在,则创建该数据库,如果数据库存在,则用用户user=test密码password=test连接数据库.
有了数据库,接下来该建表了:
代码
private void createTable(Connection connection) throws SQLException {
Statement statement = connection.createStatement()
String sql = "create table USERS("
+ " ID BIGINT not null generated by default as identity,"
+ " USER_NAME VARCHAR(20) not null,"
+ " PASSWORD VARCHAR(20),"
+ " constraint P_KEY_1 primary key (ID))"
statement.execute(sql)
sql = "create unique index USER_NAME_INDEX on USERS ("
+ " USER_NAME ASC)"
statement.execute(sql)
statement.close()
}
创建了 USERS表,包括ID,USER_NAME,PASSWORD三个列,其中ID是主键,其中generated by default as identity 的作用类似sequence,identity是定义自动加一的列,
GENERATED BY ALWAYS AS IDENTITY
GENERATED BY DEFAULT AS IDENTITY
By always和by default是说明生成这个IDENTITY的方式。
By always是完全由系统自动生成。
by default是可以由用户来指定一个值。
编写与USERS表对应的javabean(这个就不多说了),:
代码
public class User implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L
private Long id
private String userName
private String password
public Long getId() {
return id
}
public void setId(Long id) {
this.id = id
}
public String getUserName() {
return userName
}
public void setUserName(String userName) {
this.userName = userName
}
public String getPassword() {
return password
}
public void setPassword(String password) {
this.password = password
}
}
接下来就可以就数据库进行增删改查的 *** 作了:
插入数据:
代码
private void create(User user) {
Connection connection = null
try {
connection = this.getConnection()
PreparedStatement statement = connection
.prepareStatement("insert into users (user_name,password) values(?,?)")
int index = 1
statement.setString(index++, user.getUserName())
statement.setString(index++, user.getPassword())
statement.execute()
user.setId(this.getId(connection))
connection.commit()
} catch (SQLException e) {
rollback(connection)
throw new RuntimeException(e)
} finally {
if (connection != null) {
close(connection)
}
}
}
代码
private Long getId(Connection connection) throws SQLException {
CallableStatement callableStatement = connection
.prepareCall("values identity_val_local()")
ResultSet resultSet = callableStatement.executeQuery()
resultSet.next()
Long id = resultSet.getLong(1)
resultSet.close()
callableStatement.close()
return id
}
getId方法是获得系统默认的id值,是通过 identity_val_local()获得的,而函数IDENTITY_VAL_LOCAL()则可以在INSERT语句执行之后,为我们返回刚才系统为id所产生的值.感觉还是有点想sequence的curr_val.
修改数据:
代码
private void update(User user) {
Connection connection = null
try {
connection = this.getConnection()
PreparedStatement statement = connection
.prepareStatement("update users set user_name=?,password=? where id=?")
int index = 1
statement.setString(index++, user.getUserName())
statement.setString(index++, user.getPassword())
statement.setLong(index++, user.getId())
statement.execute()
connection.commit()
} catch (SQLException e) {
rollback(connection)
throw new RuntimeException(e)
} finally {
if (connection != null) {
close(connection)
}
}
}
删除数据:
代码
public void delete(Long id) {
Connection connection = null
try {
connection = this.getConnection()
PreparedStatement statement = connection
.prepareStatement("delete from users where id=?")
statement.setLong(1, id)
statement.execute()
connection.commit()
} catch (SQLException e) {
rollback(connection)
throw new RuntimeException(e)
} finally {
if (connection != null) {
close(connection)
}
}
}
查询数据:
代码
public User findById(Long id) {
Connection connection = null
try {
connection = this.getConnection()
PreparedStatement statement = connection
.prepareStatement("select user_name,password from users where id=?")
statement.setLong(1, id)
ResultSet resultSet = statement.executeQuery()
User user = null
if (resultSet.next()) {
user = new User()
user.setId(id)
user.setUserName(resultSet.getString("user_name"))
user.setPassword(resultSet.getString("password"))
}
resultSet.close()
statement.close()
connection.commit()
return user
} catch (SQLException e) {
throw new RuntimeException(e)
} finally {
if (connection != null) {
close(connection)
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)