怎样编写一个java程序能通过jdbc访问数据库实现对数据库的插入、删除、修改和查询

怎样编写一个java程序能通过jdbc访问数据库实现对数据库的插入、删除、修改和查询,第1张

1增加

String s1="insert into tableNames (id,name,password) values(myseqnextval,,);"

ClassforName(driver);

Connection conn = DriverManagergetConnection(url,dbUser,dbPwd);

PreparedStatement prepStmt = connprepareStatement(s1);

prepStmtsetString(1,name);

prepStmtsetString(2,password);

ResultSet rs=stmtexecuteUpdate();

2、删除

String s2="delete from tbNames where name=";

ClassforName(driver);

Connection conn = DriverManagergetConnection(url,dbUser,dbPwd);

PreparedStatement prepStmt = connprepareStatement(s2);

prepStmtsetString(1,name);

ResultSet rs=stmtexecuteUpdate();

3、修改

String s3=“update tbNames set name= where id=”;

ClassforName(driver);

Connection conn = DriverManagergetConnection(url,dbUser,dbPwd);

PreparedStatement prepStmt = connprepareStatement(s3);

prepStmtsetString(1,name);

prepStmtsetString(2,id);

ResultSet rs=stmtexecuteUpdate();

4、查询

String s4="select id,name,password from tbNames";

ClassforName(driver);

Connection conn = DriverManagergetConnection(url,dbUser,dbPwd);

Statement stmt=conncreateStatement();

ResultSet rs = stmtexecuteQuery(s4);

while(rsnext){

int id=rsgetInt(1);

String name = rsgetString(2);

String pwd=rsgetString(3);

Systemoutprintln(id+name+pwd); }

以上四步必须都得关闭连接;!!!

rsclose();

stmtclose();

connclose();

step1:构造连接

ClassforName("commysqljdbcDriver");

Connection con = DriverManagergetConnection("jdbc:mysql://127001:3306/db","root","123");

step2:构造语句

String sql = "select username,password from t_user where username=";

PreparedStatement stmt = conprepareStatement(sql);

stmtsetString(1, "zhangshan"); //给SQL的""(问号)传值。

step3:执行查询

ResultSet rs = stmtexecuteQuery(); //rs就是SQL查询语句返回的结果集

step4:处理结果(java 获取SQL查询语句返回的结果)

List list = new ArrayList();

//遍历结果集,这样写就可以了,就是一个循环,有多少条记录,这里就会循环多少次,

//一次就是一条记录,想像一下就像一个表的一条记录

//在这里可以做查询出来的数据处理,可以封装成对象之类的(就是把值给它)

if(rsnext()) { //遍历结果集,这样写就可以了

User u = new User();

String username = rsgetString("username");

String address = rsgetString("password ");

usetUsername(username);

usetAddress(address);

listadd(u);

}

//上面这个例子意思是,把每一条记录封装成了一个User对象,然后这些User对象都放存入到了一个list

step4:关闭连接等

public static void main(String[] args) throws Exception {

//加载驱动

ClassforName("commysqljdbcDriver");

//建立连接

Connection conn = DriverManagergetConnection("jdbc:mysql://" +

"localhost/worlduser=root&password=3496fire");

Statement stat = null;

ResultSet rs=null;

//创建语句

String strsql="select MAX(stuId) from stus;";

stat=conncreateStatement();

//执行语句,得到结果

rs=statexecuteQuery(strsql);

//使结果集光标向前移动一行

rsnext();

//输出结果结果中的第一个元素

Systemoutprintln(rsgetInt(1));

//关闭连接

rsclose();

statclose();

connclose();

}

我的是MySQL的例子

加载驱动的前提是你把对应的数据库的JDBC的jar文件导入到工程中或者在classpath中;

建立连接的URL不同数据库也是不一样的,这个可以自己去找找;

这里面有很地方会有异常,你可以先抛出;

<dependency>

<groupId>c3p0</groupId>

<artifactId>c3p0</artifactId>

<version>0912</version>

</dependency>

本文将对sdkservice生产环境上c3p0正在使用的各项配置进行详细解释,旨在为c3p0的配置提供参考标准。

sdkservice生成环境的配置如下:

#当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3

c3p0acquireIncrement=20

#初始化时获取连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3

c3p0initialPoolSize=20

#连接池中保留的最小连接数,默认为:3

c3p0minPoolSize=20

#连接池中保留的最大连接数。默认值: 15

c3p0maxPoolSize=100

#最大空闲时间,多少秒内未使用则连接被丢弃。若为0则永不丢弃。默认值: 0

c3p0maxIdleTime=60

#c3p0全局的PreparedStatements缓存的大小。如果maxStatements与maxStatementsPerConnection均为0,则缓存不生效,只要有一个不为0,则语句的缓存就能生效。如果默认值: 0

c3p0maxStatements=0

#c3p0是异步 *** 作的,缓慢的JDBC *** 作通过帮助进程完成。扩展这些 *** 作可以有效的提升性能通过多线程实现多个 *** 作同时被执行。Default: 3

c3p0numHelperThreads=10

#定义在从数据库获取新连接失败后重复尝试的次数。默认值: 30 ;小于等于0表示无限次

c3p0acquireRetryAttempts=5

#重新尝试的时间间隔,默认为:1000毫秒

c3p0acquireRetryDelay=300

#获取一个connection需要的时间,单位毫秒

c3p0checkoutTimeout=3000

#每隔多少秒检查所有连接池中的空闲连接。Default: 0

c3p0 idleConnectionTestPeriod=60

#c3p0将建一张名为改配置项的空表,并使用其自带的查询语句进行测试。如果定义了这个参数那么属性preferredTestQuery将#被忽略。你不能在这张Test表上进行任何 *** 作,它将只供c3p0测试使用。默认值: null。由于运营平台的数据库用户没有创建表的权限,故需要发sql创建表。

c3p0automaticTestTable=sys_connectiontest

#如果设为true那么在取得连接的同时将校验连接的有效性。Default: false

c3p0testConnectionOnCheckin=true

#一个checkout连接的超时设置,一旦一个checkout连接超时,他将物理的关闭,而不是返回池中,主要是防止连接被长期使用不释放,这个设置也是比较危险的

c3p0unreturnedConnectionTimeout=15

下面分块解释各配置项值的由来。

基础连接池配置:

maxPoolSize最大连接数在满足应用需要的情况下,参考默认值15,越小越好。由于sdkservice多次出现连接数不够的情况,该值也越改越大。现已改为100。

minPoolSize最小连接数需要小于等于最大连接数,参考默认值3,越小越好。同maxPoolSize的原因, 现已改为20。

initialPoolSize初始化连接数需要在最大和最小连接数之间,否则会被最小连接数的值替换,参考默认值3。 同maxPoolSize的原因, 现已改为20。

acquireIncrement连接耗尽时一次获取的连接数,参考默认值3,由于sdkservice用到的mysql proxy在连接不够进行扩容时,会出现获取连接失败的异常,所以将acquireIncrement的值设置较大,以减少mysql proxy的扩容异常。

maxIdleTime最大空闲时间,该时间内未使用,则丢弃。设置为60秒。

Statement连接池配置:

maxStatements每个连接缓存PreparedStatement的数量。在使用Statement缓存时,可能出现下列异常:

APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!

c3p0在同时关闭statement和connection的时候,或者关闭他们之间的时间很短的时候,有时候connection并没有被关闭,因为有些preparedstatement还在被cached住。参考c3p0的作者所言:

>

int Gid=rstgetInt("GId");

rstgetString("GName");

rstgetString("GPrice");

rstgetString("Gunit");

Systemoutprintln("

编号\t 品名\t 单价 \t单位");

这一段程序没有意义,rst取出来的每个值都要赋给一个变量,然后再输出这些变量,你的输出语句只是输出了一个字符串。你说的查不出来是什么意思?

以上就是关于怎样编写一个java程序能通过jdbc访问数据库实现对数据库的插入、删除、修改和查询全部的内容,包括:怎样编写一个java程序能通过jdbc访问数据库实现对数据库的插入、删除、修改和查询、jdbc中同时执行两条查询sql语句,获得结果怎么写、通过SQL语句查询到了学号的最大值,那如何在java中将其输出/取得。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10197241.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存