如果你还不知道怎么添加hsqldb到java项目,请参考我的上一篇没人看的博客
在eclipse java项目中导入hsqldb–菜鸟教程
这个使用,我还不怎么熟悉,我本身也是菜鸡一枚,写文章主要是防止自己两天不看的话,遗忘太多…呵呵呵
String user; //用户名
String pwd; //密码
String url;
Connection con;
Statement stmt;
ResultSet rs;
首先先看看怎么初始化的
public void init() { //初始化
try {
Class.forName("org.hsqldb.jdbcDriver");// 加载驱动程序
url = "jdbc:hsqldb:hsql://localhost"; 连接本机的hsqldb的url路径
user = "sa"; //hsqldb数据库默认的用户名
pwd = ""; //hsqldb数据库默认的用户 对应的默认的密码
con = DriverManager.getConnection(url, user, pwd);
System.out.println("connection");
} catch (ClassNotFoundException | SQLException e) {
System.err.println("no connection");
e.printStackTrace();
}
}
程序第一句:
Class.forName(“org.hsqldb.jdbcDriver”);// 加载驱动程序
为什么要这样写,可以参考一位大神写的文章
JDBC采用Class.forName加载驱动的意义
到现在,已经完成了向驱动管理器的注册,也就是说接下来能使用驱动程序了
于是con = DriverManager.getConnection(url, user, pwd);
首先
java.sql.Connection
主要是能与特定数据库的连接(会话),它是一个接口
DriverManager是用于管理一组JDBC驱动程序的基本服务,里面的静态方法getConnection会返回一个与数据库的连接,参数url代表连接本地的 dbc类型的hsqldb数据库,
这条语句就是 用drivermanager加载驱动程序,用url找数据库,用user,pwd登录,并返回当前程序与数据库的接口.
hsqldb图形界面执行简单sql语句
win+r输入cmd,打开dos对话框,cd到hsqldb.jar所在文件夹
输入java -cp .;hsqldb.jar org.hsqldb.server.Server 启动服务器
一定要先启动
双击下载的hsqldb.jar包,会出现图形界面形式的数据库,很方便
选择服务器
创建一张表,名字叫做example,这张表有两列,包括id和name
id的类型是整数,name的类型是字符串(长度小于等于20)
CREATE TABLE example (id INTEGER,name VARCHAR(20))
INSERT INTO example values (2017,‘qianxi’)
往表中添加一个数据项,ctrl+E执行
从表中查询数据
检索整张表
java项目代码里实现
1.创建一张表
public void create(int id,String name) {
String sql = "create table example (id integer,name varchar(20))"; //对应的sql的语句
try {
stmt = con.createStatement(); //返回一个 可执行sql语句的接口
stmt.executeUpdate(sql); //执行sql语句
stmt.close(); //关闭
} catch (SQLException e) {
e.printStackTrace();
}
}
可以把这些操作连贯成一系列的界面
DriverManager.getConnection()返回与本地hsqldb数据库的连接connection,就是打开数据库的图形界面
connection.createment()返回上面的command功能
statement.executeUpdate(sql) //执行一个sql语句
2.往表中添加数据项
public void insert(int id, String name) {
**//方法一**
String sql = "insert into stu values( " + id + "," + "\'"+ name+"\')"; //注意这里的名字是字符串形式,所以sql语句里也要显示是一个字符串,一定要加转义的单引号
try {
stmt = con.createStatement(); //返回能执行的接口
stmt.executeUpdate(sql); //执行sql语句
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
**//方法二**
//主要是针对方法一而言,如果变量是字符串,还要考虑单引号的问题,除此之外,只能一个一个的输入,不能形式化,不能符号化的表示
String sql1 = "insert into stu values(?,?)"; //用?号替代带插入的元素,相当于是一个占位符
try {
PreparedStatement stmt = con.prepareStatement(sql1);// 预处理,准备执行sql
stmt.setInt(1, id); //告诉stmt,第一列数据类型是Int,参数id放在第一列
stmt.setString(2, name); //告诉stmt,第二列数据类型是String,参数name放在第二列
stmt.executeUpdate(); //告诉完以后就可以执行了
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
执行完create()以后,在hsqldb界面,ctrl+R刷新一下,图形界面上就会有显示新建的表
执行完insert()后,到hsqldb里面查询一下,找到了刚刚插入的数据项
3.在表中进行选择
public void select() { //也可以把表名当作一个参数传进来,在这里我直接写了stu表
String sql = "select * from stu";
try {
stmt = con.createStatement(); //返回可以执行sql的接口
rs = stmt.executeQuery(sql); //执行sql语句,并返回执行的结果
while (rs.next()) { //对结果集合进行迭代
int id = rs.getInt("id"); //rs.getInt()表示能返回一个整数,这个语句是,rs取id属性,以Int类型返回结果
String name = rs.getString("name");//rs.getString()表示能返回一个字符串,这个语句是,rs取name属性,以Int类型返回结果
System.out.println("id: " + id + " name: " + name);
}
stmt.close();
rs.close();
} catch (SQLException e) {
System.out.println("cannot select");
e.printStackTrace();
}
}
ResultSet rs,是一个结果的集合,stmt.executeQuery(sql),由于sql是一条选择语句,所以会有返回值,于是把这个返回值存放在一个专门的集合里,就叫做ResultSet
执行完select,eclipse控制台会输出stu整个表的数据信息
(如果想限制条件,使用where语句,如sql换成select * from stu where id = 2019)
4.在表中进行删除
public void delete() {
String sql = "delete from stu where id = 2019";
try {
stmt = con.createStatement();
stmt.executeUpdate(sql);
stmt.close(); //执行这条sql到此结束
// con.close(); //千万要注意,如果接下来还有操作,可不要关了接口
} catch (SQLException e) {
System.out.println("cannot delete");
e.printStackTrace();
}
}
执行完成后发现hsqldb内数据发生了变化
最后附上总代码,要小心哦,不能创建两张同名的表,这张表里可以有相同的数据项
还可能有bug
总代码
package 连接hsqldb;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Try {
String user;
String pwd;
String url;
Connection con;
Statement stmt;
ResultSet rs;
public static void main(String[] args) {
Try g = new Try();
g.init();
g.delete();
g.select();
g.create();
g.insert(2018, "yiyangqianxi");
g.stop();
}
public void init() { //
try {
Class.forName("org.hsqldb.jdbcDriver");// 加载驱动程序
url = "jdbc:hsqldb:hsql://localhost";
user = "sa";
pwd = "";
con = DriverManager.getConnection(url, user, pwd);
System.out.println("connection");
} catch (ClassNotFoundException | SQLException e) {
System.err.println("no connection");
e.printStackTrace();
}
}
public void stop() {
if (con != null)
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void create() {
String sql = "create table again (id integer,name varchar(20))";
try {
stmt = con.createStatement();
stmt.executeUpdate(sql);
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void insert(int id, String name) {
String sql = "insert into stu values( " + id + "," + "\'" + name + "\')";
System.out.println(sql);
try {
stmt = con.createStatement();
stmt.executeUpdate(sql);
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
String sql1 = "insert into stu values(?,?)";
try {
PreparedStatement stmt = con.prepareStatement(sql1);// 预处理
stmt.setInt(1, id);
stmt.setString(2, name);
stmt.executeUpdate();
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void select() {
String sql = "select * from stu";
try {
stmt = con.createStatement();
rs = stmt.executeQuery(sql);
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println("id: " + id + " name: " + name);
}
stmt.close();
rs.close();
} catch (SQLException e) {
System.out.println("cannot select");
e.printStackTrace();
}
}
public void delete() {
String sql = "delete from stu where id = 2019";
try {
stmt = con.createStatement();
stmt.executeUpdate(sql);
stmt.close();
// con.close();
} catch (SQLException e) {
System.out.println("cannot delete");
e.printStackTrace();
}
}
}
敢问路在何方,路在何方!