关于数据库修改与删除的问题,请朋友帮忙,谢谢大家(在线等待)

xinshou1979330 2002-12-28 06:54:09
当我进行修改数据时,修改的都是数据库中的第一项数据,怎么回事???怎么用指针???
而当我删除数据时确把所有的数据都删除了并不是删除当前的记录.
我的整个窗体是这样设计的:
一个SSTAB控件选项卡数设置为3,分为: 添加数据 | 修改/删除数据 | 查询数据 | 这三个
我的思路是:在查询选项卡中当我单击查询数据(CommandButton)时,在MSHFLEXGRID控件中显示我所查询的数据,但同时我又将此查询的结果显示在 | 修改/删除数据 | 选项卡中的各个文本框中,在 | 修改/删除数据 | 选项卡里有 确定修改(Commandbutton),确定删除(Commandbutton),取消(Commandbutton)三个按扭
当我单击 确定修改 时进行修改,现在毛病就出现在这没当我单击 确定修改 时
修改的总是数据库中的第一项记录.而当删除时则把全部数据删除了.

请朋友告诉我一下啊???急在线等待 我将把我这两个按钮中的代码写在下面请朋友帮我 改一下谢谢,如果分数不够我可以补加.
...全文
84 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenyu5188 2002-12-30
  • 打赏
  • 举报
回复
没有将记录指针移到你想修改记录的那条记录上

你可以用filter语句来筛选记录,找到符合条件的记录后,记录指针会自动移到那条记录上的哈。

主要是自己要多看书哈。
ganzhiruogy 2002-12-30
  • 打赏
  • 举报
回复
使用Find定位到你要修改的记录上!
ganzhiruogy 2002-12-30
  • 打赏
  • 举报
回复
Find 方法


搜索 Recordset 中满足指定标准的记录。如果满足标准,则记录集位置设置在找到的记录上,否则位置将设置在记录集的末尾。

语法

Find (criteria, SkipRows, searchDirection, start)

参数

criteria 字符串,包含指定用于搜索的列名、比较操作符和值的语句。

SkipRows 可选,长整型值,其默认值为零,它指定当前行或 start 书签的位移以开始搜索。

searchDirection 可选的 SearchDirectionEnum 值,指定搜索应从当前行还是下一个有效行开始。其值可为 adSearchForward 或 adSearchBackward。搜索是在记录集的开始还是末尾结束由 searchDirection 值决定。

start 可选,变体型书签,用作搜索的开始位置。

说明

criteria 中的“比较操作符”可以是“>”(大于)、“<”(小于)、“=”(等于)、“>=”(大于或等于)、“<=”(小于或等于)、“<>”(不等于)或“like”(模式匹配)。

criteria 中的值可以是字符串、浮点数或者日期。字符串值以单引号分界(如“state = 'WA'”)。日期值以“#”(数字记号)分界(如“start_date > #7/22/97#”)。

如“比较操作符”为“like”,则字符串“值”可以包含“*”(某字符可出现一次或多次)或者“_”(某字符只出现一次)。(如“state like M_*”与 Maine 和 Massachusetts 匹配。)。
laihua 2002-12-29
  • 打赏
  • 举报
回复
学到不少东西
heipifeng 2002-12-29
  • 打赏
  • 举报
回复
那么多高手都写的很详细了,我就不献丑了。主要是没有指定修改那一条,默认的是第一条。
zqfleaf 2002-12-29
  • 打赏
  • 举报
回复
上面我说了,你还要做一个记录集指针移动的。
zqfleaf 2002-12-29
  • 打赏
  • 举报
回复
Private Sub Command4_Click()
Dim cnn As ADODB.Connection
'Dim rs As ADODB.Recordset
Dim sql As String
Set cnn = New ADODB.Connection
cnn.Open "Provider=MSDASQL.1;Persist Security Info=False;Data Source=jkxt"
sql = "delete * from information where 字段名2='" & PubKeyCarNo & "'"
If MsgBox("真的要删除??", vbYesNo) = vbYes Then
cnn.Execute sql
MsgBox "OK"
End If


'Set rs = New ADODB.Recordset

'rs.Open sql, cnn, adOpenKeyset, adLockOptimistic

'Adodc1.Recordset.Delete

'If Adodc1.Recordset.Fields(0) = Trim(Text20.Text) And Adodc1.Recordset.Fields(1) = Trim(Combo2.Text) And Adodc1.Recordset.Fields(2) = Trim(Text19.Text) And Adodc1.Recordset.Fields(3) = Trim(Text18.Text) And Adodc1.Recordset.Fields(4) = Trim(Text17.Text) And Adodc1.Recordset.Fields(5) = Trim(Text16.Text) And Adodc1.Recordset.Fields(6) = Trim(Text15.Text) And Adodc1.Recordset.Fields(7) = Format(Trim(Text14.Text)) And Adodc1.Recordset.Fields(8) = Trim(Text13.Text) And Adodc1.Recordset.Fields(9) = Trim(Text12.Text) And Adodc1.Recordset.Fields(10) = Trim(Text11.Text) Then

'Adodc1.Recordset.Delete

'rs.Close



'End If



End Sub
zqfleaf 2002-12-29
  • 打赏
  • 举报
回复
Private Sub Command5_Click()
'------------------------------------------------------------------------
' 说明:从理论上来讲车牌号是唯一的我不知道旧车是什么情况,在车厂,
' 车架与发动机号都是可以改的我建议你用车牌号作为唯一的主键,
' 当然主键也是可以改的,所以你先要定一个全局变量PubKeyCarNo
' 来保存车牌号,当rs的记录指针改变的时候给他赋值。
'------------------------------------------------------------------------
Dim cnn As ADODB.Connection
Set cnn = New ADODB.Connection
cnn.Open "Provider=MSDASQL.1;Persist Security Info=False;Data Source=jkxt"
If Trim(Text20.Text) = "" Then
MsgBox "想修改还不写新的数据,你玩我啊~!~???~", vbOKOnly + vbExclamation, "注意"
Text20.SetFocus
Exit Sub
End If
If Trim(Combo2.Text) = "" Then
MsgBox "想修改还不写新的数据,你玩我啊~!~???~", vbOKOnly + vbExclamation, "注意"
Combo2.SetFocus
Exit Sub
End If
If Trim(Text19.Text) = "" Then
MsgBox "想修改还不写新的数据,你玩我啊~!~???~", vbOKOnly + vbExclamation, "注意"
Text19.SetFocus
Exit Sub

End If
If Trim(Text18.Text) = "" Then
MsgBox "想修改还不写新的数据,你玩我啊~!~???~", vbOKOnly + vbExclamation, "注意"
Text18.SetFocus
Exit Sub

End If
If Trim(Text17.Text) = "" Then
MsgBox "想修改还不写新的数据,你玩我啊~!~???~", vbOKOnly + vbExclamation, "注意"
Text17.SetFocus
Exit Sub

End If
If Trim(Text16.Text) = "" Then
MsgBox "想修改还不写新的数据,你玩我啊~!~???~", vbOKOnly + vbExclamation, "注意"
Text16.SetFocus
Exit Sub
End If
If Trim(Text15.Text) = "" Then
MsgBox "想修改还不写新的数据,你玩我啊~!~???~", vbOKOnly + vbExclamation, "注意"
Text15.SetFocus
Exit Sub
End If
If Trim(Text14.Text) = "" Then
MsgBox "想修改还不写新的数据,你玩我啊~!~???~", vbOKOnly + vbExclamation, "注意"
Text14.SetFocus
Exit Sub
End If
If Trim(Text13.Text) = "" Then
MsgBox "想修改还不写新的数据,你玩我啊~!~???~", vbOKOnly + vbExclamation, "注意"
Text13.SetFocus
Exit Sub
End If
If Trim(Text12.Text) = "" Then
MsgBox "想修改还不写新的数据,你玩我啊~!~???~", vbOKOnly + vbExclamation, "注意"
Text12.SetFocus
Exit Sub
End If
If Trim(Text11.Text) = "" Then
MsgBox "想修改还不写新的数据,你玩我啊~!~???~", vbOKOnly + vbExclamation, "注意"
Text11.SetFocus
Exit Sub
End If
'------------------------------------------------------------------------------------
' 说明:由于我不知道你的字段名与字段类型,请按下面格式改写,如果是数值型,不要加分号
' 如果是boolean型的也不加
'-------------------------------------------------------------------------------------
sql = " update information set 字段名0='" & Trim(Text20.Text) & _
"',字段名1='" & Trim(Combo2.Text) & _
"',字段名2='" & Trim(Text19.Text) & _
"',字段名3='" & Trim(Text18.Text) & _
"',字段名4='" & Trim(Text17.Text) & _
"',字段名5='" & Trim(Text16.Text) & _
"',字段名6='" & Trim(Text15.Text) & _
"',字段名7='" & Format(Trim(Text14.Text), "yyyy-mm-dd") & _
"',字段名8='" & Trim(Text13.Text) & _
"',字段名9='" & Trim(Text12.Text) & _
"',字段名10='" & Trim(Text11.Text) & _
" where 字段2='" & PubKeyCarNo & "'"
cnn.Execute sql
'sql = "select*from information"
'Set rs = New ADODB.Recordset
'rs.Open sql, cnn, adOpenKeyset, adLockOptimistic
'rs.Fields(0) = Trim(Text20.Text)
'rs.Fields(1) = Trim(Combo2.Text)
'rs.Fields(2) = Trim(Text19.Text)
'rs.Fields(3) = Trim(Text18.Text)
'rs.Fields(4) = Trim(Text17.Text)
'rs.Fields(5) = Trim(Text16.Text)
'rs.Fields(6) = Trim(Text15.Text)
'rs.Fields(7) = Format(Trim(Text14.Text), "yyyy-mm-dd")
'rs.Fields(8) = Trim(Text13.Text)
'rs.Fields(9) = Trim(Text12.Text)
'rs.Fields(10) = Trim(Text11.Text)
'rs.Update
MsgBox "恭喜、恭喜,您已经成功修改数据。谢谢合作~!~", vbOKOnly + vbExclamation, "修改成功"
'rs.Bookmark = mark

Text20.Text = ""
Combo2.Text = ""
Text19.Text = ""
Text18.Text = ""
Text17.Text = ""
Text16.Text = ""
Text15.Text = ""
Text14.Text = ""
Text13.Text = ""
Text12.Text = ""
Text11.Text = ""

'rs.Close
End Sub
zqfleaf 2002-12-28
  • 打赏
  • 举报
回复
首先,你在把在查询中如何把内容传到修改页中,我想你肯定用数据绑定,那么这个建议你有一个KEY主键,这个是唯一,且不能改,假设为text1
'----------------------------------------
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sql As String

Set cnn = createobject("ADODB.Connection")
cnn.Open "Provider=MSDASQL.1;Persist Security Info=False;Data Source=jkxt"
'------------在这里加入你的一大堆判断-------------
sql="update table set field2='" & text2.text & "' , .......where field1='"& Text1.text & "'"
cnn.execute sql
cnn.close
set cnn=nothing
如果是删除,把sql改成
sql = "delete from information where field1='" & text20.text &"'"


of123 2002-12-28
  • 打赏
  • 举报
回复
你的问题出在这几句上。等于你重新打开了一个记录集,与你显示在MSHFLEXGRID中的不相干。
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sql As String
Set cnn = New ADODB.Connection
cnn.Open "Provider=MSDASQL.1;Persist Security Info=False;Data Source=jkxt"

sql = "select*from information"
Set rs = New ADODB.Recordset
rs.Open sql, cnn, adOpenKeyset, adLockOptimistic

解决办法:
在窗体的通用部分声明连接和记录集,在form_load中打开。各个事件中始终处理同一个记录集。也就是去掉上面6行。
如果你的MSHFLEXGRID是与ADODC绑定的,则省去这些东西:
with adodc1.recordset
.Fields(0) = Trim(Text20.Text)
.Fields(1) = Trim(Combo2.Text)
.......
.Update
end with
of123 2002-12-28
  • 打赏
  • 举报
回复
搂主,能否看看你的代码?
zqfleaf 2002-12-28
  • 打赏
  • 举报
回复
mousean(幻想无限)说的很详细,
你应该 还有四个按钮来移动记录的指针的
首条,rs.movefirst
下一条,rs.movenext
上一条 rs.movepiror
未条,rs.movelast
mouseanAnya 2002-12-28
  • 打赏
  • 举报
回复
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sql As String
Set cnn = New ADODB.Connection
Set rs = New ADODB.Recordset
cnn.Open "Provider=MSDASQL.1;Persist Security Info=False;Data Source=jkxt"
sql = "delete from information where field1='" & text20.text &"'"

rs.Open sql, cnn, adOpenKeyset, adLockOptimistic

'ADODC 重新查询一次
Adodc1.Recordset.Requery
'#################################################
注意这儿的field1 是你表中的一个字段名,它的值是text20的内容;确保这个值不会改变;如果你表中有ID字段最好使用这个字段作为where 语句的条件

如果还有不明白的地方就提出来,我会进一步说明
mouseanAnya 2002-12-28
  • 打赏
  • 举报
回复
修改操作,将其中的判断输入框是否为空部分分离出来,写成boolean型函数
清空输入框写成过程,这样可以使修改按钮的代码清晰一些
Private Sub Command1_Click()

Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sql As String

'调用判断函数,看是不是有输入框没有输入,函数为真退出当前过程,为假则所有输入框都有内容,继续执行
If JudgEmpty = True Then Exit Sub

'错误处理,当遇到异常时,程序转至 标签 errha 处处理
On Error GoTo errha:
Set cnn = New ADODB.Connection
cnn.Open "Provider=MSDASQL.1;Persist Security Info=False;Data Source=jkxt"

Set rs = New ADODB.Recordset
sql = "select * from information where field1='" & Trim(text20) & "'"

rs.Open sql, cnn, adOpenKeyset, adLockOptimistic
If Not (rs.BOF Or rs.EOF) Then
rs.Update
rs.Fields(0) = Trim(text20.Text)
rs.Fields(1) = Trim(Combo2.Text)
rs.Fields(2) = Trim(Text19.Text)
rs.Fields(3) = Trim(Text18.Text)
rs.Fields(4) = Trim(Text17.Text)
rs.Fields(5) = Trim(Text16.Text)
rs.Fields(6) = Trim(Text15.Text)
rs.Fields(7) = Format(Trim(Text14.Text), "yyyy-mm-dd")
rs.Fields(8) = Trim(Text13.Text)
rs.Fields(9) = Trim(Text12.Text)
rs.Fields(10) = Trim(Text11.Text)
rs.Update

MsgBox "恭喜、恭喜,您已经成功修改数据。谢谢合作~!~", vbOKOnly + vbExclamation, "修改成功"

rs.Bookmark = mark

'调用清空输入框的过程
Call ClearTxt

End If
rs.Close

Exit Sub
errha:
MsgBox Err.Description, vbInformation, "错误"
End Sub
'**************************************************************
''调用清空输入框的过程
Private Sub ClearTxt()
text20.Text = ""
Combo2.Text = ""
Text19.Text = ""
Text18.Text = ""
Text17.Text = ""
Text16.Text = ""
Text15.Text = ""
Text14.Text = ""
Text13.Text = ""
Text12.Text = ""
Text11.Text = ""

End Sub
'''*****************************************************************
'''判断函数
Private Function JudgEmpty() As Boolean

JudgEmpty = False '初始函数值为假

If Trim(text20.Text) = "" Then
MsgBox "想修改还不写新的数据,你玩我啊~!~???~", vbOKOnly + vbExclamation, "注意"
text20.SetFocus
JudgEmpty = True '输入框内容为空则为真,跳出函数

Exit Function
End If
If Trim(Combo2.Text) = "" Then
MsgBox "想修改还不写新的数据,你玩我啊~!~???~", vbOKOnly + vbExclamation, "注意"
Combo2.SetFocus
JudgEmpty = True
Exit Function
End If
If Trim(Text19.Text) = "" Then
MsgBox "想修改还不写新的数据,你玩我啊~!~???~", vbOKOnly + vbExclamation, "注意"
Text19.SetFocus
JudgEmpty = True
Exit Function

End If
If Trim(Text18.Text) = "" Then
MsgBox "想修改还不写新的数据,你玩我啊~!~???~", vbOKOnly + vbExclamation, "注意"
Text18.SetFocus
JudgEmpty = True

Exit Function

End If
If Trim(Text17.Text) = "" Then
MsgBox "想修改还不写新的数据,你玩我啊~!~???~", vbOKOnly + vbExclamation, "注意"
Text17.SetFocus
JudgEmpty = True
Exit Function

End If
If Trim(Text16.Text) = "" Then
MsgBox "想修改还不写新的数据,你玩我啊~!~???~", vbOKOnly + vbExclamation, "注意"
Text16.SetFocus
JudgEmpty = True
Exit Function
End If
If Trim(Text15.Text) = "" Then
MsgBox "想修改还不写新的数据,你玩我啊~!~???~", vbOKOnly + vbExclamation, "注意"
Text15.SetFocus
JudgEmpty = True
Exit Function
End If
If Trim(Text14.Text) = "" Then
MsgBox "想修改还不写新的数据,你玩我啊~!~???~", vbOKOnly + vbExclamation, "注意"
Text14.SetFocus
JudgEmpty = True
Exit Function
End If
If Trim(Text13.Text) = "" Then
MsgBox "想修改还不写新的数据,你玩我啊~!~???~", vbOKOnly + vbExclamation, "注意"
Text13.SetFocus
JudgEmpty = True
Exit Function
End If
If Trim(Text12.Text) = "" Then
MsgBox "想修改还不写新的数据,你玩我啊~!~???~", vbOKOnly + vbExclamation, "注意"
Text12.SetFocus
JudgEmpty = True
Exit Function
End If
If Trim(Text11.Text) = "" Then
MsgBox "想修改还不写新的数据,你玩我啊~!~???~", vbOKOnly + vbExclamation, "注意"
Text11.SetFocus
JudgEmpty = True
Exit Function
End If
End Function

mouseanAnya 2002-12-28
  • 打赏
  • 举报
回复
谢谢。
一般提取数据库中的记录时,指针默认停留在记录集的第一条,所以,你更新记录时,没有指定真正想要更新的记录,那么这样操作,永远只是修改第一条记录。
而删除操作时,如果同样不指明条件,删除语句则删除所有的记录。

你的代码有点乱,同时使用数据控件跟定义的记录集,我帮你整理一下,等会儿贴给你。
xinshou1979330 2002-12-28
  • 打赏
  • 举报
回复
up
mouseanAnya 2002-12-28
  • 打赏
  • 举报
回复
修改的时候也是没有使用where 语句指定更新记录的条件
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sql As String
Set cnn = New ADODB.Connection
cnn.Open "Provider=MSDASQL.1;Persist Security Info=False;Data Source=jkxt"
sql = "update information set field2='" & text2 & "' ,field3='" & text3 & "' where field1='" & text1 & "' "

Set rs = New ADODB.Recordset

rs.Open sql, cnn, adOpenKeyset, adLockOptimistic
mouseanAnya 2002-12-28
  • 打赏
  • 举报
回复
在删除按钮中,你是先把所有的数据提取出来,之后的代码没有指定具体要删除的记录,所以才会把所有提取出来的记录删除

如果是删除选中的记录,
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sql As String
Set cnn = New ADODB.Connection
cnn.Open "Provider=MSDASQL.1;Persist Security Info=False;Data Source=jkxt"
sql = "delete from information where field1='" & text1.text &"'"

Set rs = New ADODB.Recordset

rs.Open sql, cnn, adOpenKeyset, adLockOptimistic
mouseanAnya 2002-12-28
  • 打赏
  • 举报
回复
你的问题出记录指针在没有移动到需要操作位置
xinshou1979330 2002-12-28
  • 打赏
  • 举报
回复
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sql As String
Set cnn = New ADODB.Connection
cnn.Open "Provider=MSDASQL.1;Persist Security Info=False;Data Source=jkxt"
sql = "select*from information"

Set rs = New ADODB.Recordset

rs.Open sql, cnn, adOpenKeyset, adLockOptimistic

Adodc1.Recordset.Delete

If Adodc1.Recordset.Fields(0) = Trim(Text20.Text) And Adodc1.Recordset.Fields(1) = Trim(Combo2.Text) And Adodc1.Recordset.Fields(2) = Trim(Text19.Text) And Adodc1.Recordset.Fields(3) = Trim(Text18.Text) And Adodc1.Recordset.Fields(4) = Trim(Text17.Text) And Adodc1.Recordset.Fields(5) = Trim(Text16.Text) And Adodc1.Recordset.Fields(6) = Trim(Text15.Text) And Adodc1.Recordset.Fields(7) = Format(Trim(Text14.Text)) And Adodc1.Recordset.Fields(8) = Trim(Text13.Text) And Adodc1.Recordset.Fields(9) = Trim(Text12.Text) And Adodc1.Recordset.Fields(10) = Trim(Text11.Text) Then

Adodc1.Recordset.Delete

rs.Close

这是删除按钮中的代码
加载更多回复(1)
Spring 出品的 JdbcTemplate 对于不想使用hibernate或者ibatis那样需要大量学习成本而且还想获得对象化的人来说是很好用的。但是 JdbcTemplate还是有很多不足之处或者说是缺点。比如你没法像hibernate那样直接传一个对象给它让他拆分成sql并保存起来,当然这也是可以理解的,毕竟它并没有要求你去写 hbm.xml 文件所以无法知道你哪些字段要映射,哪些不要等等。又比如JdbcTemplate 可以帮忙把一个查询结果传化为一个对象列表,但是你需要查阅一些资料才知道要用 BeanPropertyRowMapper 。如果下次要用的时候又忘记了这个类,又要查一次或者翻以前的代码来看,其实完全可以提供一个方法直接传一个PO类进去自动创建BeanPropertyRowMapper 。基于以上的一些不足之处,我建立了 JdbcTemplateTool 它有以下特性:把查询结果转换为PO列表,不需要调用BeanPropertyRowMapper传一条统计sql比如 aselect count(1) from table可以直接返回一个数字作为结果,不需要自己实现中间步骤。可以直接把一个PO类存到数据库通过PO类和一个id可以获取到该对象通过PO类可以直接update数据库记录不需要实现 BatchPreparedStatementSetter, 就可以批量update通过一个对PO对象删除对应的数据库记录依然可以使用原始的JdbcTemplate目前只在mysql上测试.Maven 依赖   org.crazycake   jdbctemplatetool   1.0.4-RELEASE 快速开始STEP 1. 创建一个maven项目    创建一个maven项目叫testjtt. 添加jdbctemplatetool 依赖到pom.xml. 再添加以下依赖到 pom.xml.   junit   junit   4.11   test     org.springframework     spring-context     3.2.2.RELEASE     test     com.mchange     c3p0     0.9.2.1     test     mysql     mysql-connector-java     5.1.19     test     org.springframework     spring-test     3.2.2.RELEASE     test 最好使用 1.6 jdk. 我并没有在 1.5 下测试STEP 2. 创建测试数据库    创建一个测试的数据库叫jtt_test创建一个用户travis不要分配密码. 赋予jtt_test的权限给travis.CREATE USER 'travis'@'%' IDENTIFIED BY ''; GRANT ALL ON jtt_test.* TO 'travis'@'%'; flush privileges;创建一张表employee插入一些测试数据.DROP TABLE IF EXISTS `employee`; CREATE TABLE `employee` (   `id` int(11) NOT NULL,   `name` varchar(300) NOT NULL,   `join_date` datetime NOT NULL,   `age` int(11) NOT NULL,   PRIMARY KEY  (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*Data for the table `employee` */ insert  into `employee`(`id`,`name`,`join_date`,`age`) values (1,'jack','2014-09-22 00:00:00',23),(2,'ted','2014-08-30 00:00:00',25),(3,'jim','2014-06-22 00:00:00',33);STEP 3. 配置一下spring    在test文件夹下创建resources文件夹. 添加resources到 source folder 修改输出为target/test-classes创建spring.xml在 test/resources 里面<?xml version="1.0" encoding="UTF-8"?>              jdbc:mysql://localhost:3306/jtt_test?characterEncoding=utf8         com.mysql.jdbc.Driver         travis                                                            STEP 4. 创建PO类    创建Employee.javaimport java.sql.Timestamp; import javax.persistence.Id; public class Employee {     private Integer id;     private String name;     private Timestamp joinDate;     private Integer age;     @Id     public Integer getId() {         return id;     }     public void setId(Integer id) {         this.id = id;     }     public String getName() {         return name;     }     public void setName(String name) {         this.name = name;     }     public Timestamp getJoinDate() {         return joinDate;     }     public void setJoinDate(Timestamp joinDate) {         this.joinDate = joinDate;     }     public Integer getAge() {         return age;     }     public void setAge(Integer age) {         this.age = age;     } }STEP 5. 创建测试用例    创建HelloJTTTest.javaimport static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import java.util.List; import org.crazycake.jdbcTemplateTool.JdbcTemplateTool; import org.junit.Test; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; @ContextConfiguration(locations={"classpath:spring.xml"}) public class HelloJTTTest extends AbstractJUnit4SpringContextTests{     @Test     public void testSave(){         JdbcTemplateTool jtt = super.applicationContext.getBean("jdbcTemplateTool",JdbcTemplateTool.class);         Employee e = new Employee();         e.setId(4);         e.setName("billy");         Date now = new Date();         e.setJoinDate(new Timestamp(now.getTime()));         e.setAge(33);         try {             jtt.save(e);         } catch (Exception e1) {             e1.printStackTrace();         }     } }STEP 6. 启动!    运行测试用例,等待绿色条。然后去数据库会看到多了一条记录 :idnamejoin_dateage4billy2014-09-24 22:51:2033高级教程    以下是各个方法的详细介绍list把查询结果转换为PO列表,不需要调用BeanPropertyRowMapper。 自动根据数据库的列将下划线转为驼峰命名规则映射类的属性.@Test public void testList(){     JdbcTemplateTool jtt = super.applicationContext.getBean("jdbcTemplateTool",JdbcTemplateTool.class);     List es = jtt.list("select * from employee where age < ? order by id desc", new Object[]{30}, Employee.class);     assertThat(new Integer(es.size()),is(2));     assertThat(es.get(1).getName(),is("jack")); }count    传一条统计sql比如 aselect count(1) from table可以直接返回一个数字作为结果,不需要自己实现中间步骤。@Test public void testCount() throws IOException, SQLException {     JdbcTemplateTool jtt = super.applicationContext.getBean("jdbcTemplateTool",JdbcTemplateTool.class);     int total = jtt.count("select count(1) from employee", null);     assertThat(total,is(4));     }save可以直接把一个PO类存到数据库。如果你不想把某个列映射为数据库字段可以使用 @Trasient 注解在getter上public class Student {     private Integer id;     private String name;     private String nothing;     public Integer getId() {         return id;     }     public void setId(Integer id) {         this.id = id;     }     public String getName() {         return name;     }     public void setName(String name) {         this.name = name;     }     @Transient     public String getNothing() {         return nothing;     }     public void setNothing(String nothing) {         this.nothing = nothing;     } }这个字段会被跳过@Test public void testSave() throws Exception {     JdbcTemplateTool jtt = super.applicationContext.getBean("jdbcTemplateTool",JdbcTemplateTool.class);     Student s = new Student();     s.setName("michael");     s.setNothing("nothing");     jtt.save(s); }get    通过PO类和一个id可以获取到该对象。但是前提是需要在主键的getter上标上 @Id 注解@Id public Integer getId() {     return id; }例子@Test public void testGet() throws NoIdAnnotationFoundException, NoColumnAnnotationFoundException, IOException, SQLException {     JdbcTemplateTool jtt = super.applicationContext.getBean("jdbcTemplateTool",JdbcTemplateTool.class);     Employee e = jtt.get(Employee.class, 3);     assertThat(e.getName(),is("jim")); }update    自动根据PO类更新数据库. 记得增加@Id.@Test public void testUpdate() throws Exception {     JdbcTemplateTool jtt = super.applicationContext.getBean("jdbcTemplateTool",JdbcTemplateTool.class);     Employee e = jtt.get(Employee.class, 1);     e.setAge(23);     jtt.update(e); }batchUpdate    批量更新@Test public void testBatchUpdate() throws SQLException, IOException {     build();     JdbcTemplateTool jtt = super.applicationContext.getBean("jdbcTemplateTool",JdbcTemplateTool.class);     List<Object[]> params = new ArrayList<Object[]>();     Object[] p1 = new Object[]{23,"jack"};     params.add(p1);     Object[] p2 = new Object[]{29,"tim"};     params.add(p2);     jtt.batchUpdate("update employee set age = ? where name = ?", params); }delete    删除数据库对象@Test public void testDelete() throws Exception {     JdbcTemplateTool jtt = super.applicationContext.getBean("jdbcTemplateTool",JdbcTemplateTool.class);     Employee e = new Employee();     e.setId(1);     jtt.delete(e); }getJdbcTemplate    你依然可以使用原始的JdbcTemplate. 调用JdbcTemplateTool.getJdbcTemplate()to getJdbcTemplate就可以了。

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧