java连接数据库(java连接数据库代码)

java连接数据库(java连接数据库代码),第1张

java连接数据库的代码位于MVC中的M(模型层)中,主要负责与数据库打交道。

本人把我以前写的代码加上注释给你看看希望对你有帮助。

publicclassUserInfoDAO{

//验证登陆名/密码sql语句

//private-----这个sql语句只在本类内部使用,没有必要public

//static-----sql语句仅仅一份就足够了

//final-----sql语句一般在运行时不变,final修饰的变量相当于常量

//常量名所有字母大写

privatestaticfinalStringSQL_CHECK_USERINFO=

"SELECTLOGINNAME,USERNAME,PASSWORD,AGE,ADDRESSFROMUSERINFOWHERELOGINNAME=ANDPASSWORD=";

publicUserInfoDAO(){

}

/

验证登陆名/密码方法

@paramuUserInfo

@returnboolean

/

publicbooleancheckUser(UserInfou){

booleanb=false;//验证是否成功的标识

Connectionconn=null;//数据库连接的引用

pstmt=null;//引用

ResultSetrs=null;//结果集引用

//调用的方法,得到数据库里连接实例

conn=();

try{

//通过Connection的()方法构建实例,参数为sql语句

pstmt=conn(SQL_CHECK_USERINFO);

//为sql语句中的赋值,注意序号从1开始

pstmtsetString(1,u());

pstmtsetString(2,ugetPassword());

//执行查询得到结果集

rs=pstmt();

//在结果集中循环,如果结果集中有记录意味着验证成功

b=rsnext();//标识置为true

while(rsnext()){

b=true;//标识置为true

}

}catch(ex){

Systemoutprintln(exgetMessage());

}finally{

//注意:一定在finally中释放数据库资源

cleanUP(rs,pstmt,conn);

}

returnb;

}

privatevoidcleanUP(ResultSetrs,pstmt,Connectionconn){

try{

if(rs!=null){

rsclose();

}

if(pstmt!=null){

pstmtclose();

}

if(conn!=null){

connclose();

}

}catch(ex){

Systemoutprintln(exgetMessage());

}

}

}

连接数据库查询可以得到一个ResultSet

rs结果集总可以实现吧

然后通过

List

list

=

new

ArrayList();

while(rsnext()){

创建一个实体对象po

posetAttribute1(rsgetString("value1"));

posetAttribute2(rsgetString("value2"));

posetAttribute3(rsgetString("value3"));

listadd(po);

}

requestsetAttribute("list",list);

返回一个list集合到界面通过

<c:foreach

item="${list}"

var="c">

<tr>

<td>${cvalue1}</td>

<td>${cvalue2}</td>

<td>${cvalue3}</td>

</tr>

</c:foreach>

就可以了

我觉得1万的数据并发量并不大,想oracle数据库,mysql承载这些并发是没有问题的

我觉得,主要的问题在于你GPS是一直在修改的,因为车辆在不断的行驶,这样的话,可能会影响数据库的性能

我觉得,你可以用一个内存行的数据库,比如,redis,用这个来存放GPS信息,redis是基于内存的,读写要比关系数据库速度快(忽略网络因素),你可能要问GPS入库怎么弄,可以做一个定时任务,每隔多少时间来将redis的数据写入到数据库中,当然,redis也支持一些算法,比如LRU,来设置何时将数据同步到数据库

for(Int i=0; i++; i<100)

{

sql,增加信息;

执行sql语句

}

跟多for循环应用,参考 如下答案

2016224 i码邦每日一练(JavaSE)

使用for循环输出杨辉三角。

>

List<CatchDate> abc =daoqueryBySQL

//如果你只要ID

List<String> list =new ArrayList<String>();

for(CatchDate cd:abc){

    listadd(cdgetCategoryid());

}

return list;

import javasqlConnection;

import javasqlDriverManager;

import javasqlPreparedStatement;

import javasqlResultSet;

import javasqlSQLException;

//stmtexecuteUpdate("create table People(name varchar(255),A int,B int)");

//stmtexecuteUpdate("insert into People values('张三',1,0)");

//stmtexecuteUpdate("insert into People values('李四',2,1)");

//stmtexecuteUpdate("insert into People values('王五',3,1)");

//stmtexecuteUpdate("insert into People values('赵云',4,2)");

//stmtexecuteUpdate("insert into People values('张飞',5,3)");

public class Test {

private static void query(Connection conn,String sql,int a) {

PreparedStatement stmt = null;

ResultSet rs = null;

try {

stmt = connprepareStatement(sql);

stmtsetInt(1, a);

rs = stmtexecuteQuery();

while (rsnext()) {

Systemoutprintln(rsgetString("name")+":"+rsgetInt("A"));

query(conn,sql,rsgetInt("A"));

}

} catch (SQLException e) {

eprintStackTrace();

} finally {

if (rs != null) {

try {

rsclose();

rs=null;

Systemoutprintln(a+":rs closed");

} catch (SQLException e) {

eprintStackTrace();

}

}

if (stmt != null) {

try {

stmtclose();

stmt=null;

Systemoutprintln(a+":stmt closed");

} catch (SQLException e) {

eprintStackTrace();

}

}

}

Systemoutprintln("===============================");

}

public static void main(String[] args) {

Connection conn = null;

try {

conn = DriverManagergetConnection("jdbc:derby:E:/Derby/test");

String sql="select from people where B=";

query(conn,sql, 1);

} catch (SQLException e) {

eprintStackTrace();

} finally {

if (conn != null) {

try {

connclose();

Systemoutprintln("Connection关闭。");

} catch (SQLException e) {

eprintStackTrace();

}

}

}

}

}

我设计了一个思想并实现运行成功:

设计思想:

把数据库表中数据全部查出。每一个数据为一个结点,比如说楼主表的A,B字段中共有数据a、b、c、d、e,则这5个数据为5个结点。创建一个双向图表示节点间的关系。比如说楼主提供的数据的双向图为a<--->b<--->c<--->d<--->e,在我的程序中表现为一个结点类的集合。求结果的时候只要求从指定节点能够到达的节点集合就可以了。

求结果时使用递归调用,原理是:求结点a能到达的节点=求结点a关联节点能到达的节点。

程序运行结果:

数据库数据:

+------+------+

| A | B |

+------+------+

| a | c |

| a | d |

| b | e |

| e | f |

+------+------+

result[a]=[a, c, d]

result[c]=[c, a, d]

result[e]=[e, b, f]

更改数据库数据,添加a和e的关联:

mysql> select from aaa;

+------+------+

| A | B |

+------+------+

| a | c |

| a | d |

| b | e |

| e | f |

| e | a |

+------+------+

5 rows in set (000 sec)

result[a]=[a, c, d, e, b, f, a]

从这个结果看出第一个数据库数据a c d和 b e f是独立的两块,建立了a e的关联后,成了一个整体的块,因此从a节点能到达所有节点。

程序代码:

本程序是使用的Mysql数据库,使用时请导入Mysql数据库驱动。创建TestJdbcjava复制代码进来直接运行。

如有错误或者疑问请联系QQ232319792或者1988-2@163com或者直接发百度信息(别用baiduHi)

import javasqlConnection;

import javasqlDriverManager;

import javasqlResultSet;

import javasqlStatement;

import javautilArrayList;

import javautilList;

public class TestJdbc {

public static List<String> result=new ArrayList<String>();

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

select("a");

Systemoutprintln(result);

}

public static void select(String who) throws Exception{

List<Node> nodes=createMap();//获取节点图

Node thisNode=null;

for(Node n:nodes)//从节点图中获取开始节点

if(ngetName()equals(who))thisNode=n;

digui(thisNode,null);//递归调用,假设开始节点的父亲是空的。

}

public static void digui(Node star,Node father){

resultadd(stargetName());//把本次开始节点加入结果集合

//遍历开始节点的关联节点集合

for(Node n:stargetSons()){

if(father!=null && nequals(father))

//该关联节点是开始节点的父亲节点,那么跳过

//当一个关联节点仅有一个关联节点即他的父亲,那么递归结束

continue;

father=star;//递归前设置父亲节点为本次开始节点

digui(n,father);//递归调用

}

}

public static List<Node> createMap() throws Exception{

List<Node> nodes=new ArrayList<Node>();//创建节点集合保存节电双向集合

//以下链接mysql数据库并把所有数据查询出来

String driverName="commysqljdbcDriver";

ClassforName(driverName);

String url="jdbc:mysql://127001:3306/jdbc";

String username="root";

String pwd="root";

Connection con=null;

con=DriverManagergetConnection(url,username,pwd);

Statement stmt = concreateStatement();

ResultSet rs = stmtexecuteQuery("select from aaa;");

//创建节点引用,保存一条记录中的两个字段值

Node temp1=null;

Node temp2=null;

//遍历每条记录

while(rsnext()){

temp1=new Node(rsgetString(1));//创建节点

temp2=new Node(rsgetString(2));

temp1getSons()add(temp2);//设置节点间关联

temp2getSons()add(temp1);//设置节点间关联

if(nodesindexOf(temp1)==-1)//如果A字段节点在节点图中不存在,则加入到节点图中

nodesadd(temp1);

else{//如果A字段节点在节点图中存在了

//得到已经存在的那个节点,并把B字段节点关联给他。

nodesget(nodesindexOf(temp1))getSons()add(temp2);

temp1=nodesget(nodesindexOf(temp1));

//B字段节点关联的节点是已经存在的了,因此要更改关联对象。更改成已经存在的节点而不是new出来的。

temp2getSons()clear();

temp2getSons()add(nodesget(nodesindexOf(temp1)));

}

if(nodesindexOf(temp2)==-1)

//如果B字段节点在节点图中不存在直接加入节点图

nodesadd(temp2);

else{

//否则,要重新关联。

nodesget(nodesindexOf(temp2))getSons()add(temp1);

}

}

return nodes;

}

}

//构造节点类

class Node{

private String name;//节点值

private List<Node> sons=new ArrayList<Node>();//节点关联节点集合

public Node(String name){

thisname=name;

}

public String getName() {

return name;

}

public void setName(String name) {

thisname = name;

}

public List<Node> getSons() {

return sons;

}

public void setSons(List<Node> sons) {

thissons = sons;

}

@Override

public String toString() {

return name+" ";

}

@Override

public boolean equals(Object obj) {

return nameequals(((Node)obj)getName());

}

}

以上就是关于java连接数据库(java连接数据库代码)全部的内容,包括:java连接数据库(java连接数据库代码)、java 查询数据库怎么循环输出、java多用户同时访问和数据库进行交互,如何能够高并发等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/sjk/9784917.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存