从数据库中循环取值的算法 java

从数据库中循环取值的算法 java,第1张

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

设计思想:

数据库表中数据全部查出。每一个数据为一个结点,比如说楼主表的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());

}

}

首先我要说你的b表表结构不合理,应该是

b(地区编码,地区名称,父编码)

这样多好

不过你要的sql可以为

select azcxzqh,cname

from a,

(select distinct 省编码 as code,省名 as name from b

union all

select distinct 市编码 as code,市名 as name from b

union all

select distinct 县编码 as code,县名 as name from b

)as c

where azcxzqh = ccode

bigint类型的取值范围:-2^31到2^31-1。

SQL Server在整数值超过int数据类型支持的范围时,将使用 bigint数据类型。为了实现兼容性,int数据类型仍是 Microsoft SQL Server 2005 中的主要整数数据类型。

除非明确说明,否则那些接受int表达式作为其参数的函数、语句和系统存储过程都不会改变,从而不会支持将 bigint表达式隐式转换为这些参数。

因此,当 bigint值在int数据类型支持的范围内时,SQL Server 才将 bigint隐式转换为int。如果 bigint表达式包含了一个在int数据类型支持范围之外的值,就会在运行时出现转换错误。

int数据类型所表示的数值范围从-2^31到2^31-1,也就是说,你可以用int数据类型来表达-2,147,483,648到2,147,483,647(即大约正负二十亿)之间的整数。一个int型占用四个字节的存储空间。

扩展资料

注意事项

在数据类型优先表中,bigint数据类型位于int之上、smallmoney之下。SQL Server不能自动的把int型数据转换成bigint型。如果函数的参数表达式是一个bigint类型时,函数只能返回bigint类型的数据。

使用bigint数据类型的函数有AVG、CEILING、FLOOR、MAX、MIN、ROUND以及SUM等等。

可以在指定了整型数据的所有语法位置使用bigint数据类型:ALTER PROCEDURE、ALTER TABLE、CREATE PROCEDURE、CREATE TABLE以及 DECLARE变量。

你可以在SQL Server目录组件(catalog components)得到bigint栏的信息。

参考资料来源:百度百科-bigint

方法1:onchange一次就提交一次表单,就可以传值给php了

方法2:Ajax提交

大概js传值给PHP就这两种办法了。

或者你可以考虑一次讲所有数据用PHP写成JS二维数组。当然,如果数据量太大,这样是不行的。

不知道你要用什么语言实现?

下面的是我写的c#的例子,可以给你参考

string xx = "1 2 3 4 5";

string[] xxxx = xxSplit(' ');

for (int i = 0; i < xxxxLength; i++)

{

ResponseWrite(xxxxGetValue(i)ToString()+"<br>");

}

下面的代码即可实现(对数据库的 *** 作):

<%@ page

language="java"

contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"

%>

<%@page import="javasql"%>

<center>

<H1> <font color="blue" size="12">管理中心</font></H1>

<HR />

<table width="80%" border="1">

<tr>

<th>ID</th>

<th>书名</th>

<th>作者</th>

<th>价格</th>

<th>删除</th>

</tr>

<%

// 数据库的名字

String dbName = "zap";

// 登录数据库的用户名

String username = "sa";

// 登录数据库的密码

String password = "123";

// 数据库的IP地址,本机可以用 localhost 或者 127001

String host = "127001";

// 数据库的端口,一般不会修改,默认为1433

int port = 1433;

String connectionUrl = "jdbc:sqlserver://" + host + ":" + port + ";databaseName=" + dbName + ";user=" + username

+ ";password=" + password;

//

//声明需要使用的资源

// 数据库连接,记得用完了一定要关闭

Connection con = null;

// Statement 记得用完了一定要关闭

Statement stmt = null;

// 结果集,记得用完了一定要关闭

ResultSet rs = null;

try {

// 注册驱动

ClassforName("commicrosoftsqlserverjdbcSQLServerDriver");

// 获得一个数据库连接

con = DriverManagergetConnection(connectionUrl);

String SQL = "SELECT from note";

// 创建查询

stmt = concreateStatement();

// 执行查询,拿到结果集

rs = stmtexecuteQuery(SQL);

while (rsnext()) {

%>

<tr>

<td>

<%=rsgetInt(1)%>

</td>

<td>

<a href="prepareupdateID=<%=rsgetInt("ID")%>" target="_blank"><%=rsgetString(2)%></a>

</td>

<td>

<%=rsgetString(3)%>

</td>

<td>

<%=rsgetString(4)%>

</td>

<td>

<a href="deleteID=<%=rsgetInt("ID")%>" target="_blank">删除</a>

</td>

</tr>

<%

}

} catch (Exception e) {

// 捕获并显示异常

eprintStackTrace();

} finally {

// 关闭我们使用过的资源

if (rs != null)

try {

rsclose();

} catch (Exception e) {}

if (stmt != null)

try {

stmtclose();

} catch (Exception e) {}

if (con != null)

try {

conclose();

} catch (Exception e) {}

}

%>

</table>

<a href="insertjsp">添加新纪录</a>

</center>

1

在打开SQL

Server

Managemenet

Studio窗口,在对象资源管理器窗口依次站看数据库——新建的数据库节点

2

鼠标右键单击视图节点,在d出的快捷菜单中选择新建视图命令,打开视图设计器窗口和添加表对话框

3

从添加表对话框中选择建立新视图的基表,视图和函数。单击添加按钮(在这里可以选择一张表单击依次添加,也可以按住Ctrl键同时选择多张表),将表添加到视图设计器中。添加完毕后,关闭添加表对话框,如果关闭添加表对话框后,仍需要添加表,单击视图是机器工具栏上的添加表按钮,即可d出添加表对话框

4

根据新建视图的需要,从表中选择视图引用的列。将列加入视图有3中方式:可以再关系图中选中相应表的相应列左边的复选框来完成;也可以铜鼓哦选择条件窗格中的列栏上的列名来完成;还可以再SQL窗格中输入SELECT语句来选择视图需要的列。

5

在条件窗格中的筛选器栏中设置过滤记录的条件。

6

设置玩此后,在视图设计器窗口中单击工具栏中的验证SQL语法

按钮检查T-SQL语法。确认语法正确后,单击执行

SQL按钮预览视图返回的结果,

7

最后,单击保存按钮,d出选择名称对话框,在该对话框中为视图命名,谈后点击确定按钮,将视图保存到数据库中。

以上就是关于从数据库中循环取值的算法 java全部的内容,包括:从数据库中循环取值的算法 java、数据库取值a表一个值=b表的某一列的值,怎么样写!请指教、请问数据库中的bigint类型的取值范围等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

    保存