Android 对listview数据的增删改查
图-1 android 实现对listview数据的增删改查主要界面
本例只有一个UpdateListViewActivity类,相关的操作以及功能均在一个界面完成。对listview 数据的增删改查,实质就是对填充的数组(填充的数据)进行重新修改后,再次调用notifyDataSetChanged()方法进行更新。尽管如此,对数据使用起来还是比较生疏,下面的例子能加强对listview数据更新的理解。
UpdateListViewActivity.java类是程序的唯一的一个类,实现了对listview增删改查的操作,代码比较多,但理解并不比较复杂。
1.UpdateListViewActivity.java
1.package com.updatelistview.main;
2.
3.import java.util.ArrayList;
4.import java.util.HashMap;
5.
6.import android.app.Activity;
7.import android.app.AlertDialog;
8.import android.content.Context;
9.import android.content.DialogInterface;
10.import android.os.Bundle;
11.import https://www.360docs.net/doc/1d3031453.html,youtInflater;
12.import android.view.View;
13.import android.view.View.OnClickListener;
14.import android.widget.Button;
15.import android.widget.EditText;
16.import android.widget.LinearLayout;
17.import android.widget.ListView;
18.import android.widget.SimpleAdapter;
19.import android.widget.Toast;
20.
21.public class UpdateListViewActivity extends Activity {
22.// 控件
23.private Button addBtn;
24.private Button deleteBtn;
25.private Button editBtn;
26.private Button queryBtn;
27.private ListView listview;
28.// 数组
29.private SimpleAdapter listItemAdapter;
30.private ArrayList
31.
32./** Called when the activity is first created. */
33.@Override
34.public void onCreate(Bundle savedInstanceState) {
35.super.onCreate(savedInstanceState);
36. setContentView(https://www.360docs.net/doc/1d3031453.html,yout.main);
37.
38.// 获取控件
39. addBtn = (Button) findViewById(R.id.add_id);
40. deleteBtn = (Button) findViewById(R.id.delete_id);
41. editBtn = (Button) findViewById(R.id.edit_id);
42. queryBtn = (Button) findViewById(R.id.query_id);
43. listview = (ListView) findViewById(R.id.show_result);
44.
45.// 初始化数据
46. init();
47.
48.// 设置控件事件监听
49. addBtn.setOnClickListener(addClick);
50. deleteBtn.setOnClickListener(deleteClick);
51. editBtn.setOnClickListener(editClick);
52. queryBtn.setOnClickListener(queryClick);
53.
54. }
55.
56.// 添加事件响应
57. OnClickListener addClick = new OnClickListener() {
58.
59.@Override
60.public void onClick(View v) {
61.// TODO Auto-generated method stub
62.
63.// 加载输入框的布局文件
64. LayoutInflater inflater = (LayoutInflater) UpdateListViewActivity.this
65. .getSystemService(https://www.360docs.net/doc/1d3031453.html,YOUT_INFLATER_SERVICE);
66.final LinearLayout layout = (LinearLayout) inflater.inflate(
67. https://www.360docs.net/doc/1d3031453.html,yout.input_add, null);
68.
69.// 弹出的对话框
70.
71.new AlertDialog.Builder(UpdateListViewActivity.this)
72./* 弹出窗口的最上头文字 */
73. .setTitle("添加一条数据")
74./* 设置弹出窗口的图式 */
75. .setIcon(android.R.drawable.ic_dialog_info)
76./* 设置弹出窗口的信息 */
77. .setMessage("请输入添加的内容")
78. .setView(layout)
79. .setPositiveButton("确定",
80.new DialogInterface.OnClickListener() {
81.public void onClick(
82. DialogInterface dialoginterface, int i) {
83.
84. EditText inputStringr = (EditText) layout
85. .findViewById(R.id.input_add_string);
86.
87. String str = inputStringr.getText()
88. .toString();
89.
90.if (str == null || str.equals("")) {
91.
92. Toast.makeText(getApplicationContext(),
93."添加的内容不能为空
", Toast.LENGTH_SHORT)
94. .show();
95. } else {
96. HashMap
STRING, Object>();
97. map.put("viewspot", str);
98. map.put("add", R.drawable.right);
99. listItem.add(0, map);
100.// 如果在前面添加一条数据添加
101.// listItem.add(map);
102. listItemAdapter.notifyDataSetChanged();
103. Toast.makeText(
104. UpdateListViewActivity.this,
105."添加的一条数据为:" + str + "",
106. Toast.LENGTH_SHORT).show();
107.
108. }
109.
110. }
111. })
112. .setNegativeButton("取消",
113.new DialogInterface.OnClickListener() { /* 设置跳出窗口的返回事件 */
114.public void onClick(
115. DialogInterface dialoginterface, int i) {
116. Toast.makeText(UpdateListViewActivity.this, 117."取消了删除数据", Toast.LENGTH_SHORT) 118. .show();
119.
120. }
121. }).show();
122.
123. }
124. };
125.
126.// 删除事件响应
127. OnClickListener deleteClick = new OnClickListener() {
128.
129.@Override
130.public void onClick(View v) {
131.// TODO Auto-generated method stub
132.
133./**
134. * listItem.clear();清空所有数据
135. *
136. * */
137.
138./*
139. * listItem.clear();
140. * listItemAdapter.notifyDataSetChanged();
141. */
142.
143.// 加载输入框的布局文件
144. LayoutInflater inflater = (LayoutInflater) UpdateListViewActivity.this 145. .getSystemService(https://www.360docs.net/doc/1d3031453.html,YOUT_INFLATER_SERVICE); 146.final LinearLayout layout = (LinearLayout) inflater.inflate(
147. https://www.360docs.net/doc/1d3031453.html,yout.input_delete, null);
148.
149.// 弹出的对话框
150.
151.new AlertDialog.Builder(UpdateListViewActivity.this)
152./* 弹出窗口的最上头文字 */
153. .setTitle("删除一条数据")
154./* 设置弹出窗口的图式 */
155. .setIcon(android.R.drawable.ic_dialog_info)
156./* 设置弹出窗口的信息 */
157. .setMessage("请输入删除的索引")
158. .setView(layout)
159. .setPositiveButton("确定",
160.new DialogInterface.OnClickListener() {
161.public void onClick(
162. DialogInterface dialoginterface, int i) {
163.
164. EditText inputNumber = (EditText) layout
165. .findViewById(R.id.input_delete_number); 166.
167. String str = inputNumber.getText()
168. .toString();
169.
170.if (str == null || str.equals("")) {
171.
172. Toast.makeText(getApplicationContext(), 173."请输入一个数字", Toast.LENGTH_SHORT) 174. .show();
175. } else {
176.int number = Integer.valueOf(str);
177.
178.int size = listItem.size();
179.
180.// 判断数字是否超出数组索引范围
181.if (number >= size) {
182. Toast.makeText(
183. getApplicationContext(),
184."没有找到删除的数据索引",
185. Toast.LENGTH_SHORT).show();
186.
187. } else {
188.
189. String value = listItem.get(number)
190. .toString();
191. listItem.remove(number);
192. listItemAdapter
193. .notifyDataSetChanged();
194. Toast.makeText(
195. UpdateListViewActivity.this,
196."删除的数据为:" + value + "",
197. Toast.LENGTH_SHORT).show();
198.
199. }
200. }
201.
202. }
203. })
204. .setNegativeButton("取消",
205.new DialogInterface.OnClickListener() { /* 设置跳出窗口的返回事件 */
206.public void onClick(
207. DialogInterface dialoginterface, int i) {
208. Toast.makeText(UpdateListViewActivity.this, 209."取消了删除数据", Toast.LENGTH_SHORT) 210. .show();
211.
212. }
213. }).show();
214.
215. }
216. };
217.// 修改事件响应
218. OnClickListener editClick = new OnClickListener() {
219.
220.@Override
221.public void onClick(View v) {
222.// TODO Auto-generated method stub
223.// 加载输入框的布局文件
224. LayoutInflater inflater = (LayoutInflater) UpdateListViewActivity.this 225. .getSystemService(https://www.360docs.net/doc/1d3031453.html,YOUT_INFLATER_SERVICE); 226.final LinearLayout layout = (LinearLayout) inflater.inflate(
227. https://www.360docs.net/doc/1d3031453.html,yout.input_edit, null);
228.
229.// 弹出的对话框
230.
231.new AlertDialog.Builder(UpdateListViewActivity.this)
232./* 弹出窗口的最上头文字 */
233. .setTitle("修改一条数据")
234./* 设置弹出窗口的图式 */
235. .setIcon(android.R.drawable.ic_dialog_info)
236./* 设置弹出窗口的信息 */
237. .setMessage("请输入修改的索引及内容")
238. .setView(layout)
239. .setPositiveButton("确定",
240.new DialogInterface.OnClickListener() {
241.public void onClick(
242. DialogInterface dialoginterface, int i) {
243.
244. EditText inputEditNumber = (EditText) layout 245. .findViewById(R.id.input_edit_number); 246.
247. String numberStr = inputEditNumber
248. .getText().toString();
249.
250. EditText inputEditString = (EditText) layout 251. .findViewById(R.id.input_edit_string); 252.
253. String editStr = inputEditString.getText()
254. .toString();
255.
256.if (numberStr == null
257. || numberStr.equals("")) {
258.
259. Toast.makeText(getApplicationContext(), 260."请输入要修改的索引
", Toast.LENGTH_SHORT)
261. .show();
262. } else {
263.int number = Integer.valueOf(numberStr); 264.
265.int size = listItem.size();
266.
267.// 判断数字是否超出数组索引范围
268.if (number >= size) {
269. Toast.makeText(
270. getApplicationContext(),
271."没有找到修改的数据索引",
272. Toast.LENGTH_SHORT).show();
273.
274. } else {
275.
276. HashMap
277. map.put("viewspot", editStr);
278. map.put("add", R.drawable.right);
279.
280. listItem.set(number, map);
281. listItemAdapter
282. .notifyDataSetChanged();
283.
284. Toast.makeText(
285. UpdateListViewActivity.this,
286."数据修改为:" + editStr + "",
287. Toast.LENGTH_SHORT).show();
288.
289. }
290. }
291.
292. }
293. })
294. .setNegativeButton("取消",
295.new DialogInterface.OnClickListener() { /* 设置跳出窗口的返回事件 */
296.public void onClick(
297. DialogInterface dialoginterface, int i) {
298. Toast.makeText(UpdateListViewActivity.this, 299."取消了修改数据", Toast.LENGTH_SHORT) 300. .show();
301.
302. }
303. }).show();
304.
305. }
306. };
307.
308.// 查询事件响应
309. OnClickListener queryClick = new OnClickListener() {
310.
311.@Override
312.public void onClick(View v) {
313.// TODO Auto-generated method stub
314.// 查询数据
315. listItemAdapter.notifyDataSetChanged();
316. }
317. };
318.
319.// 初始化数据
320.private void init() {
321.
322. listItem = new ArrayList
323.for (int i = 0; i < 12; i++) {
324. HashMap
325. map.put("viewspot", "北京故宫,颐和园" + i);
326. map.put("add", R.drawable.right);
327. listItem.add(map);
328. }
329. listItemAdapter = new SimpleAdapter(getApplicationContext(), listItem,// 数据源
330. https://www.360docs.net/doc/1d3031453.html,yout.items, new String[] { "viewspot", "add" }, new int[] { 331. R.id.viewspot, R.id.add });
332. listview.setAdapter(listItemAdapter);
333.
334. } 335. 336.}
数据库的增删改查(精)
学习收藏数据库增删改查 --查询信息系和计算机系的学生,并按学生所在系和学号排序。select sno,sname,Sdept from Student where Sdept='CS'OR Sdept='IS' order by Sdept,sno ASC --查询学生表中最小的年龄。 select MIN(sage from student --查询课程名中包含“数据”的课程名。 select cno,cname from course where Cname like'%数据%' --查询先行课程为空值的课程号、课程名及学分 select cno,cname,ccredit from Course where Cpno is null --查询李勇选修的数据库课程的成绩 select grade from SC where Sno=(select Sno from Student where Sname='李勇'and Cno=(select Cno from Course where cname='数据库' --查询平均成绩分以上的学生的学号 select distinct sno from SC scx where (select AVG(Grade from SC scy
where scy.sno=scx.Sno>85 --求计算机系没有选修数据库课程的学生姓名 select sname from Student where Sno not in(select Sno from SC where Cno in(select Cno from Course where Sname='数据库'and Sdept='IS' --求至少选修了学号为S1所选修的全部课程的学生学号 select distinct sno from SC scx where not exists(select*from SC scy where scy.Sno='20021522'and not exists(select* from sc scz where scz.sno=scx.sno and https://www.360docs.net/doc/1d3031453.html,o=https://www.360docs.net/doc/1d3031453.html,o --求各系的系的学生人数的,并将结果按学生人数的降序排序 select Sdept,COUNT(sno from Student group by Sdept order by Sdept ASC --查询选修了数学课程并且成绩高于该门课程平均分的学生学号和成绩 select sno,grade from SC scx where Grade>=(select AVG(Grade from SC scy where Cno=(select Cno from Course where Cname='数学'and Cno=(select Cno from Course
Android 应用程序内存泄漏的分析
Android 应用程序内存泄漏的分析以前在学校里学习Java的时候,总是看到说,java是由垃圾收集器(GC)来管理内存回收的,所以当时形成的观念是Java不会产生内存泄漏,我们可以只管去申请内存,不需要关注内存回收,GC会帮我们完成。呵呵,很幼稚的想法,GC没那么聪明啊,理论及事实证明,我们的Java程序也是会有内存泄漏的。 (一)Java内存泄漏从何而来 一般来说内存泄漏有两种情况。一种情况如在C/C++语言中的,在堆中的分配的内存,没有将其释放,或者是在没有将其释放掉的时候,就将所有能访问这块内存的方式都删掉(如指针重新赋值);另一种情况则是在内存对象明明已经不需要的时候,还仍然保留着这块内存和它的访问方式(引用)。第一种情况,在Java中已经由于垃圾回收机制的引入,得到了很好的解决。所以,Java中的内存泄漏,主要指的是第二种情况。 (二)需要的工具 1.DDMS—Update heap Gause GC Heap 是DDMS自带的一个很不错的内存监控工具,下图红色框中最左边的图标就是该 工具的启动按钮,它能在Heap视图中显示选中进程的当前内存使用的详细情况。下图 框中最右边的是GC工具,很多时候我们使用Heap监控内存的时候要借助GC工具,点 击一次GC按钮就相当于向VM请求了一次GC操作。中间的按钮是Dump HPROF file,它 的功能相当于给内存拍一张照,然后将这些内存信息保存到hprof文件里面,在使用我 们的第二个工具MAT的时候会使用到这个功能。 2.MAT(Memory Analyzer Tool) Heap工具能给我们一个感性的认识,告诉我们程序当前的内存使用情况和是否存在内存 泄漏的肯能性。但是,如果我们想更详细,更深入的了解内存消耗的情况,找到问题所 在,那么我们还需要一个工具,就是MAT。这个工具是需要我们自己去下载的,可以下 载独立的MAT RCP 客户端,也可以以插件的形式安装到Eclipse里面,方便起见,推荐 后者。 安装方法: A.登录官网https://www.360docs.net/doc/1d3031453.html,/mat/downloads.php B.下载MAT Eclipse插件安装包(红框所示,当然你也可是选择Update Site在线安装,个人觉得比较慢)
数据库增删改查基本语句
数据库增删改查基本语句 adoquery1.Fielddefs[1].Name; 字段名 dbgrid1.columns[0].width:=10; dbgrid的字段宽度 adoquery1.Fields[i].DataType=ftString 字段类型 update jb_spzl set kp_item_name=upper(kp_item_name) 修改数据库表中某一列为大写select * from master.dbo.sysobjects ,jm_https://www.360docs.net/doc/1d3031453.html,ers 多库查询 adotable1.sort:='字段名称ASC' adotable排序 SQL常用语句一览 sp_password null,'新密码','sa' 修改数据库密码 (1)数据记录筛选: sql="select * from 数据表where 字段名=字段值orderby 字段名[desc] " sql="select * from 数据表where 字段名like '%字段值%' orderby 字段名[desc]" sql="select top10 * from 数据表where 字段名orderby 字段名[desc]" sql="select * from 数据表where 字段名in('值1','值2','值3')" sql="select * from 数据表where 字段名between 值1 and 值2" (2)更新数据记录: sql="update 数据表set 字段名=字段值where 条件表达式" sql="update 数据表set 字段1=值1,字段2=值2……字段n=值n where 条件表达式" (3)删除数据记录: sql="delete from 数据表where 条件表达式" sql="delete from 数据表"(将数据表所有记录删除) (4)添加数据记录: sql="insert into 数据表(字段1,字段2,字段3…) values(值1,值2,值3…)" sql="insert into 目标数据表select * from 源数据表"(把源数据表的记录添加到目标数据表)
超强Android系统SD卡分区教程,加速你的Android系统
强烈分享分区软件 Acronis Disk Director Suite 10 通过读卡器给SD卡分三区的方法 Acronis Disk Director Suite 10 中文免注册版 68MB 下载地址: https://www.360docs.net/doc/1d3031453.html,/groups/@g165358/259136.topic 第一步、安装 Acronis Disk Director Suite 10 中文免注册版 第二步、将SD卡插入读卡器,读卡器再插进电脑USB接口 第三步、打开我的电脑,选择SD卡盘符鼠标右键选择格式化(FAT32)不要选择快速格式化 第四步、打开电脑里面的控制面板选择管理工具选择计算机管理 现在看左边,选择储存 -> 磁盘管理 现在看右边,看到你的 SD卡分区没? 鼠标放在你的 SD卡那个分区上,鼠标右键呼出菜单,选择删除磁盘分区,OK 第五步、打开 Acronis Disk Director Suite 10 你现在实际应该选择的分区顺序和大小是: 分第一个分区“FAT32”格式大小选择,你的卡的总容
量 xxxxMB 减 580MB,得出来的就都是FAT32的空间容量 分第二个分区“EXT3”格式大小选择,580MB-96MB(EXT3这个分区,300-499MB都可以,但注意不要超过499MB)一般来说这个分区大小在四百多MB,这个分区分的时候需要注意,这个区分完后剩余的空间大小不能超过96MB,推荐剩余94.13M,留给最后的一个分区就行了 分第三个分区“Linux交换”格式大小嘛,最后的都是它的咯,推荐94.13M 以上分区的时候,你之前划拨的空间与出来以后显示大小,肯定数字上有出入,这个正常,不去管它,你只要确认你分出来以后的大小就行了! 下面的第18步之前,你要确认你分的区是上面说的三个区,且 ETX3格式分区没有超过499MB、Linux交换格式分区没有超过96MB(或者说94.13MB), 1.点选已删除分区的SD卡,创建新的分区
SQL数据库中的增删改查总结1
一、增:有2种方法 1.使用insert插入单行数据: 语法:insert [into]<表名> [列名] values <列值> 例:insert into Strdents (姓名,性别,出生日期) values ('邢金聪','男','1990/6/15') 注意:如果省略表名,将依次插入所有列 2.使用insert,select语句将现有表中的数据添加到已有的新表中 语法:insert into <已有的新表> <列名> select <原表列名> from <原表名> 例:insert into addressList ('姓名','地址','电子邮件')selectname,address,email from Strdents 注意:查询得到的数据个数、顺序、数据类型等,必须与插入的项保持一致 二、删:有2中方法 1.使用delete删除数据某些数据 语法:delete from <表名> [where <删除条件>] 例:delete from awhere name='邢金聪'(删除表a中列值为邢金聪的行) 注意:删除整行不是删除单个字段,所以在delete后面不能出现字段名 2.使用truncate table 删除整个表的数据
语法:truncate table<表名> 例:truncate table addressList 注意:删除表的所有行,但表的结构、列、约束、索引等不会被删除;不能 用于有外建约束引用的表 三、改 使用update更新修改数据 语法:update <表名> set <列名=更新值> [where <更新条件>] 例:truncate table addressList 注意:删除表的所有行,但表的结构、列、约束、索引等不会被删除;不能 用于有外建约束引用的表 四、查 1.普通查询 语法:select <列名> from <表名> [where <查询条件表达试>] [order by<排序的列 名>[asc或desc]] 1).查询所有数据行和列 例:select * from a 说明:查询a表中所有行和 2).查询部分行列--条件查询 例:select i,j,kfrom a where f=5 说明:查询表a中f=5的所有行,并显示i,j,k3列
android如何查看cpu的占用率和内存泄漏
android如何查看cpu的占用率和内存泄漏 在分析内存优化的过程中,其中一个最重要的是我们如何查看cpu的占用率和内存的占用率呢,这在一定程度上很重要,经过查询资料,研究了一下,暂时了解到大概有以下几种方式,如果哪位高手有更好的办法,或者文中描述有错误,还望高手在下面留言,非常感谢! 一、通过eclipse,ADT开发工具的DDMS来查看(Heap) 在“Devices”窗口中选择模拟器中的一个需要查看的程序,从工具条中选“Update heap”按钮,给这个程序设置上“heap Updates”,然后在Heap视图中点击Cause GC就可以实时显示这个程序的一些内存和cpu的使用情况了。
然后就会出现如下界面: 说明: a) 点击“Cause GC”按钮相当于向虚拟机请求了一次gc操作; b) 当内存使用信息第一次显示以后,无须再不断的点击“Cause GC”,Heap视图界面会定
时刷新,在对应用的不断的操作过程中就可以看到内存使用的变化; c) 内存使用信息的各项参数根据名称即可知道其意思,在此不再赘述。 大致解析如下: 这个就是当前应用的内存占用,allocated 是已经分配的内存free是空闲内存, heap size 是虚拟机分配的不是固定值 heap size 的最大值跟手机相关的 有网友说, 一般看1byte的大部分就是图片占用的 如何判断应用是否有内存泄漏的可能性呢? 如何才能知道我们的程序是否有内存泄漏的可能性呢。这里需要注意一个值:Heap视图中部有一个Type叫做data object,即数据对象,也就是我们的程序中大量存在的类类型的对象。在data object一行中有一列是“Total Size”,其值就是当前进程中所有Java数据对象的内存总量,一般情况下,这个值的大小决定了是否会有内存泄漏。可以这样判断: a) 不断的操作当前应用,同时注意观察data object的Total Size值; b) 正常情况下Total Size值都会稳定在一个有限的范围内,也就是说由于程序中的的代码良好,没有造成对象不被垃圾回收的情况,所以说虽然我们不断的操作会不断的生成很多对象,而在虚拟机不断的进行GC的过程中,这些对象都被回收了,内存占用量会会落到一个稳定的水平; c) 反之如果代码中存在没有释放对象引用的情况,则data object的Total Size值在每次GC 后不会有明显的回落,随着操作次数的增多Total Size的值会越来越大, 直到到达一个上限后导致进程被kill掉。
android vold学习总结
vold学习总结 V old(volume daemon):源码路径android/system/vold,部分引用代码位于android/system/core/libsysutils/src,android/system/core/include/sysutils/下。 它用于管理和控制android平台的外部设备,包括u盘、sd卡等的插入,拔出和格式化等。V old为守护进程,由init进程启动,V old的框架如下图所示: Linux kernel与vold进程通过netlink机制进行跨进程通信,vold中的NetlinkManager 接收来自linux kernel上报的uevent事件,然后将其转换成一个NetlinkEvent类型,并调用V olumeManager类的相应方法进行处理,V olumeManager会将处理的结果发送给MountService,VolumeManager与MountService之间通过CommandListener机制进行通信,本质是通过socket进行跨进程通信,MountService运行在SystemServer进程中。 Uevent事件内容就是一个字符串,linux kernel在下列两种情况下会上报uevent事件: 1.外设状态发生变化触发,当有U盘、sd卡等外设的插拔动作时,都会引起linux kernel 上报uevent事件,如果vold在外设状态发生变化之前已经建立了netlink连接,就能收到相应的uevent事件。 2.在/sys目录下会有一个叫做uevent的文件,往该文件中写入特定的数据,也会触发kernel发送和该设备相关的uevent事件,这个由应用层触发,例如vold启动时,会往uevent 文件中写入数据,它就会触发linux kernel发送uevent事件,这样vold就能获取设备的当前信息。 在etc/目录下有个vold.fstab文件(实际上该文件是在system/etc目录下,它在system/core/rootdir/init.rc中有配置:symlink /system/etc /etc,通过软链接而链接到etc目录下),该文件是android系统与硬件平台交互的接口,用户可以手动配置该文件,在 android\system\core\rootdir\etc\下有个vold.fstab文件,它描述了vold.fstab文件配置挂载设备的模板, dev_mount
JAVA数据库基本操作增删改查(精)
JAVA 数据库基本操作, 增删改查 package mypack; JAVA 数据库基本操作, 增删改查 import java.sql.Connection; import java.sql.ResultSet; import java.util.ArrayList; public class DbOper {//查询多行记录public ArrayList select({Connection conn =null; ResultSet rs =null; try {import java.sql.PreparedStatement; import java.sql.SQLException; PreparedStatement pstmt =null; ArrayList al =new ArrayList(; conn =DbConn.getConn(;pstmt =conn.prepareStatement(“select *from titles ”; rs =pstmt.executeQuery(;while (rs.next({Titles t =new Titles(;t.setTitleid(rs.getString(1;t.setTitle(rs.getString(2;al.add(t;}}catch (SQLExceptione { e.printStackTrace(;}finally {try {//TODO 自动生成catch 块if (rs!=null rs.close(;if (pstmt!=nullpstmt.close(;if (conn!=nullconn.close(;}catch (SQLExceptione { e.printStackTrace(;}}//TODO 自动生成catch 块 return al; }//查询单个对象public Titles selectOne(Stringtitleid{Connection conn =null; ResultSet rs =null; try {PreparedStatement pstmt =null; Titles t =new Titles(;
安卓性能优化方案
随着技术的发展,智能手机硬件配置越来越高,可是它和现在的PC相比,其运算能力,续航能力,存储空间等都还是受到很大的限制,同时用户对手机的体验要求远远高于PC的桌面应用程序。以上理由,足以需要开发人员更加专心去实现和优化你的代码了。选择合适的算法和数据结构永远是开发人员最先应该考虑的事情。同时,我们应该时刻牢记,写出高效代码的两条基本的原则:(1)不要做不必要的事;(2)不要分配不必要的内存。 我从去年开始接触Android开发,以下结合自己的一点项目经验,同时参考了Google的优化文档和网上的诸多技术大牛给出的意见,整理出这份文档。 1. 内存优化 Android系统对每个软件所能使用的RAM空间进行了限制(如:Nexus o ne 对每个软件的内存限制是24M),同时Java语言本身比较消耗内存,d alvik虚拟机也要占用一定的内存空间,所以合理使用内存,彰显出一个程序员的素质和技能。 1) 了解JIT 即时编译(Just-in-time Compilation,JIT),又称动态转译(Dynamic Translation),是一种通过在运行时将字节码翻译为机器码,从而改善字节码编译语言性能的技术。即时编译前期的两个运行时理论是字节码编译和动态编译。Android原来Dalvik虚拟机是作为一种解释器实现,新版
(Android2.2+)将换成JIT编译器实现。性能测试显示,在多项测试中新版本比旧版本提升了大约6倍。 详细请参考https://www.360docs.net/doc/1d3031453.html,/cool_parkour/blog/item/2802b01586e22cd8a6ef3f6b. html 2) 避免创建不必要的对象 就像世界上没有免费的午餐,世界上也没有免费的对象。虽然gc为每个线程都建立了临时对象池,可以使创建对象的代价变得小一些,但是分配内存永远都比不分配内存的代价大。如果你在用户界面循环中分配对象内存,就会引发周期性的垃圾回收,用户就会觉得界面像打嗝一样一顿一顿的。所以,除非必要,应尽量避免尽力对象的实例。下面的例子将帮助你理解这条原则: 当你从用户输入的数据中截取一段字符串时,尽量使用substring函数取得原始数据的一个子串,而不是为子串另外建立一份拷贝。这样你就有一个新的String对象,它与原始数据共享一个char数组。如果你有一个函数返回一个String对象,而你确切的知道这个字符串会被附加到一个Stri ngBuffer,那么,请改变这个函数的参数和实现方式,直接把结果附加到StringBuffer中,而不要再建立一个短命的临时对象。 一个更极端的例子是,把多维数组分成多个一维数组: int数组比Integer数组好,这也概括了一个基本事实,两个平行的int数组比(int,int)对象数组性能要好很多。同理,这试用于所有基本类型的组合。如果你想用一种容器存储(Foo,Bar)元组,尝试使用两个单独的Foo[]
数据库增删改查
02.连接命令:mysql -h[主机地址] -u[用户名] -p[用户密码] 03.创建数据库:create database [库名] 04.显示所有数据库: show databases; 05.打开数据库:use [库名] 06.当前选择的库状态:SELECT DATABASE(); 07.创建数据表:CREATE TABLE [表名]([字段名] [字段类型]([字段要求]) [字段参数], ......); 08.显示数据表字段:describe 表名; 09.当前库数据表结构:show tables; 10.更改表格 11. ALTER TABLE [表名] ADD COLUMN [字段名] DATATYPE 12. 说明:增加一个栏位(没有删除某个栏位的语法。 13. ALTER TABLE [表名] ADD PRIMARY KEY ([字段名]) 14. 说明:更改表得的定义把某个栏位设为主键。 15. ALTER TABLE [表名] DROP PRIMARY KEY ([字段名]) 16. 说明:把主键的定义删除。 17.显示当前表字段:show columns from tablename; 18.删库:drop database [库名]; 19.删表:drop table [表名]; 20.数据操作 21.添加:INSERT INTO [表名] VALUES('','',......顺序排列的数据); 22.查询: SELECT * FROM [表名] WHERE ([条件]); 23.建立索引:CREATE INDEX [索引文件名] ON [表名] ([字段名]); 24.删除:DELETE FROM [表名] WHERE ([条件]); 25.修改:UPDATE [表名] SET [修改内容如name = 'Mary'] WHERE [条件]; 26. 27.导入外部数据文本: 28.1.执行外部的sql脚本 29.当前数据库上执行:mysql < input.sql 30.指定数据库上执行:mysql [表名] < input.sql 31.2.数据传入命令load data local infile "[文件名]" into table [表名]; 32.备份数据库:(dos下) 33.mysqldump --opt school>school.bbb 34. 35. 36. 37.提示:常用MySQL命令以";"结束,有少量特殊命令不能加";"结束,如备份数据库 38.一. 增删改查操作 39. 40.============================================================================ ===== 41.1. 增: 42.insert into 表名values(0,'测试'); 43.注:如上语句,表结构中有自动增长的列,也必须为其指定一个值,通常为0 44.insert into 表名(id,name) values(0,'尹当')--同上
SQL常用增删改查语句
SQLSQL常用增删改查语句 作者:hiker 一.Insert 插入语句 1.Insert into 表名(列名)values (对应列名值) //插入一行. 2.Insert into 新表名(列名) Select (列名) 旧表名 3.Select 旧表名.字段… Into 新表名from 旧表名 4.Select identity ( 数据类型,标识种子,标识增长量) as 列名 Into新表名 From 旧表名 5.Insert 表名(列名) Select (对应列名值) union Select (对应列名值) union Select (对应列名值) 二.Update 更新语句 1.Update 表名set 列名=’更新值’ where 更新条件 三.delete 删除语句 1.delete from 表名where 删除条件 2.truncate table 表名//删除表中所有行 四.select 基本查询语句 1.select 列名from 表名where 查询条件 order by 排序的列名asc或desc升/降 2.select 列名as 别名from 表名where 查询条件 3.select 列名from 表名where 列名is null //查询空值 4.select 列名, ‘常量值’ as 别名from 表名//查询时定义输出一列常量值 5.select top 5 列名from 表名//查询前5行 6.select top 5 percent 列名from 表名//查询前百分之5的数据行 五.select 函数查询语句 1.select LEN(Class_Name)from Class //查询class_Name字符串长度 2.select upper(Class_Name)from Class //查询class_Name并转换为大写 3.ltrim和rtrim //清除字符串左右空格 4.select REPLACE(card_No,'0','9')from CardRecord//修改列中字符串中的字符 列名字符串中0修改为9 5.select STUFF(Card_No,2,3,'8888')from CardRecord 列名字符串中第2个开始删除3个字符,再从第二个开始插入8888字符串 6.select GETDATE()//显示系统日期
改变Android手机软件安装位置的解决办法(精)
改变 Android 手机软件安装位置的解决办法 谷歌 Android 系统手机默认只能把软件安装在手机内存里,使本来就不大的手机内存显得捉襟见肘。如果你也是个手机软件狂人,喜欢尝试各种各样新奇有趣的软件,面对越来越少的手机内存空间,不得不对已经安装的软件痛下 **。你是否还在安装与卸载之间纠结? Follow Me!我们一起来给 Android 系统扩扩容,让“ 机器人” 也可以“ 大肚能容” ,免去存储空间不足的后顾之忧。 Tips :存储器分为随机存储器(RAM 和只读存储器(ROM 两种。手机 ROM 相当于 PC 上的硬盘, 用于存储手机操作系统和软件, 也叫 FLASH ROM, 决定手机存储空间的大小。手机 RAM 相当于 PC 的内存,其大小决定手机的运行速度。 要把大象装冰箱里总共分三步, 而 Android 系统中把软件安装到 SD 卡上, 比这还简单, 两步就够了: 一、存储卡分区 首先我们需要对手机 SD 卡进行分区, 分一个 FAT32分区和一个 Ext3分区, FAT32分区用于正常存储图片、音乐、视频等资料,而 Linux 格式的 Ext3分区就是用于扩容安装软件的分区。以笔者的 2G SD卡为例, FAT32分区 1.35GB , Ext3分区 494MB 。下载并安装 Acronis Disk Director Suite 软件。将手机 SD 卡装入读卡器并连接电脑,然后运行 Acronis Disk Director Suite软件。 1.FAT32分区。找到代表 SD 卡的磁盘分区,点击右键,选择“ 删除” 命令,删除已有分区。当成为“ 未分配” 分区时,点击右键,选择“ 创建分区” ,在弹出的对话框中,文件系统选择: FAT32,创建为“ 主分区” ,设置好分区大小 1.35GB ,点击确定按钮。 2. Ext3分区。在剩余的 494MB 分区上,点击右键,选择“ 创建分区” ,在弹出的对话框中, 文件系统选择:Ext3,创建为“ 主分区” ,设置好分区大小 494MB ,点击确定按钮。
数据库增删改查操作(2)(精)
数据库增删改查操作(2) 一、案例描述 程序运行的时候加载的界面如图1,包括添加、删除、修改和查询所有数据按钮,并实现相应功能。 图1 图2 单击“添加”按钮,插入一条记录,效果如图2;单击“查询全部”按钮,查询得到全部记录,并将结果打印出来,如图3;单击“删除”按钮,删除指定记录,如图4;单击“修改”按钮,修改指定记录,如图5。 图3
图4 图5 二、知识链接 (4)ContentValues类 ● ContentValues类和Hashtable类较为相似,它用于存储一些键值对,可以被ContentResolver类处理,但是它存储的键值对当中的键是一个String类型,而值都是基本类型。ContentValues类作为一个重要的参数在SQLiteDatabase中的insert,update等方法中使用。 ● ContentValues类有3种构造方法,格式分别如下: √ ContentValues(:使用默认的初始大小来创建一个空集。 √ ContentValues(int size):使用指定的初始大小size值来创建一个空集。 √ ContentValues(ContentValues from):复制给定的集合from,用于创建一组集合数值。 ● ContentValues类的常用方法介绍如下:
√ void clear(:清空集合中的所有数值。 √ boolean containsKey(String key):如果集合中包含了指定的关键字key,则返回true,否则返回false。 √ Object get(String key):返回关键字key对应的数值,返回数值类型为Object,通常还需要进行强制类型转换。 √ void put(String key,Integer value):将一个值加入到集合中,其中参数key表示集合中的关键字;参数value表示要添加的数据。ContentValues类还有很多put方法,主要的区别是第二个参数为其他数据类型,例如:put(String key,Byte value)、put(String key,Float value)、put(String key,Short value)、put(String key,byte[] value) √ void remove(String key):将某个关键字key的数值从集合中删除。 √ int size (:返回集合中数值的个数。 三、案例实现 (1)MainActivity.java中添加数据的方法 /** * 添加一条记录 */ public void add(View view { Random random=new Random(; SQLiteDatabase db=personHelper.getWritableDatabase(; //db.execSQL("insert into info(name,phone values(?,?",new Object[]{"张三"+random.nextInt(100,"186********"}; ContentValues values=new ContentValues(; values.put("name", "张三"+random.nextInt(100; values.put("phone", "186775411"+random.nextInt(100;
(完整word版)SQL常用的增删改查语句、视屏笔记
SQL:结构化查询语言,是国际化标准组织采纳的标准数据库语言 作用:数据库管理员可以用利用次语言操作数据库系统,即:SQL是一种能够被数据库系统读懂的操作语言。 T—SQL是微软公司针对SQL Server这种关系数据库所定义的一种SQL语言,用户可以完成Server数据库中的所有操作。 SQL的分类: (1):数据定义语言,DDL 用来创建数据库和数据库中的各种对象 数据库中的对象包括:表、视图、索引、存储过程、触发器 DDL常用的命令包括:create、alter、drop (2):数据操纵语言,DML 可以完成对数据库中数据的查询、更新、删除、插入的功能 DML常用的命令包括:select、update、delete、insert (3)数据控制语言,DCL DCL常用的命令包括:grant、revoke、deny (4)数据类型 1、数字数据类型 a、整型数据类型:bigint、int、smallint、tinyint b、浮点数据类型:float、real c、固定精度数据类型:decimal、numeric d、货币数据类型:money、smallmoney 将数据格式转换成字符串方法:STR(ID);---ID为数据类型,STR(ID)为字符串 2、字符数据类型:varchar、char、text、nchar、nvarchar、ntext 区别char和varchar数据类型: char数据类型是存放固定长度的字符 Varchar数据类型是存放动态长度的字符 char(14),实际放入到数据库的字符长度为14个字符,如果实际存储的长度小于定义的长度,那么数据库会在次字符串后面加上3个空格 1、insert语句: insert语句是属于SQL语言中的DML 作用:为表插入数据 你向一个表中插入一条新记录,但有一个字段没有提供数据。在这种情况下,有下面的四种可能: 1、如果该字段有一个缺省值(默认值),该值会被使用。 2、如果该字段可以接受空值,而且没有缺省值,则会被插入空值。 3、如果该字段不能接受空值,而且没有缺省值,就会出现错误。你会收到错误信息: The column in table mytable may not be null. 4、如果该字段是一个标识字段,那么它会自动产生一个新值。当你向一个有标识字段的表中插入新记录时,只要忽略该字段,标识字段会给自己赋一个新值。 使用INSERT语句可向文本型字段中插入数据。但是,如果你需要输入很长的字符串,你应该使用WRITETEXT语句。 语法:insert into 表名(列名1,列名2,…..) values(值1,值2,….) 注意:(列名1,列名2,…..)可以不写,这样的话,插入的values(值1,值2,….)中的值必须包含表中的所有列,不然会报错。
数据库语句增删改查
mysql语句用法,添加、修改、删除字段一,连接MySQL 二,MySQL管理与授权 三,数据库简单操作 四, 数据库备份 五,后记 一,连接MySQL 格式:mysql -h 远程主机地址 -u 用户名 -p 回车 输入密码进入: mysql -u root -p 回车 Enter password: ,输入密码就可以进入 mysql> 进入了 退出命令:>exit 或者ctrl+D 二,MySQL管理与授权 1.修改密码:
格式:mysqladmin -u 用户名 -p 旧密码 password 新密码 2.增加新用户: >grant create,select,update....(授予相关的操作权限) ->on 数据库.* -> to 用户名@登录主机 identified by '密码' 操作实例: 给root用户添加密码: # mysqladmin -u root password 52netseek 因为开始root没有密码,所以-p旧密码一项可以省略. 登陆测试: # mysql -u root -p 回车 输入密码,成功登陆. 将原有的mysql管理登陆密码52netseek改为52china. # mysqladmin -u root -p 52netseek password '52china' 创建数据库添加用户并授予相应的权限: mysql> create database phpbb; Query OK, 1 row affected (0.02 sec)
mysql> use phpbb; Database changed mysql> grant create,select,update,insert,delete,alter -> on phpbb.* -> to phpbbroot@localhost identified by '52netseek'; Query OK, 0 rows affected (0.00 sec) 授予所有的权限: >grant all privileges >on bbs.* >to bbsroot@localhost identified by '52netseek' 回收权限: revoke create,select,update,insert,delete,alter on phpbb.* from phpbbroot@localhost identified by '52netseek'; 完全将phpbbroot这个用户删除: >use mysql >delete from user where user='phpbbroot' and host='localhost'; >flush privileges; 刷新数据库 三,数据库简单操作
Android内存优化小建议 以及活用(SoftReference 和 WeakReference )
android因其系统的特殊性,安装的软件默认都安装到内存中,所以随着 用户安装的软件越来越多,可供运行的程序使用的内存越来越小,这就要求我们在开发android程序时,尽可能的少占用内存。根据我个人的开发经验总结了如下几点优化内存的方法: 1创建或其他方式获得的对象如不再使用,则主动将其置为null。 2尽量在程序中少使用对图片的放大或缩小或翻转.在对图片进行操作时占用的内存可能比图片本身要大一些。 3调用图片操作的后,及时的清空,调用recycle()提醒经行垃圾回收。 4尽可能的将一些静态的对象(尤其是集合对象),放于SQLite数据库中。并且对这些数据的搜索匹配尽可能使用sql语句进行。 5一些连接资源在不使用使应该释放,如数据库连接文件输入输出流等。应该避免在特殊的情况下不释放(如异常或其他情况) 6一些长周期的对像引用了短周期的对象,但是这些短周期的对象可能只在很小的范围内使用。所以在查内存中也应该清除这一隐患。如果你想写一个Java程序,观察某对象什么时候会被垃圾收集的执行绪清除,你必须要用一个reference记住此对象,以便随时观察,但是却因此造成此对象的reference数目一直无法为零,使得对象无法被清除。 https://www.360docs.net/doc/1d3031453.html,ng.ref.WeakReference 不过,现在有了Weak Reference之后,这就可以迎刃而解了。如果你希望能随时取得某对象的信息,但又不想影响此对象的垃圾收集,那
么你应该用Weak Reference来记住此对象,而不是用一般的reference。 A obj=new A(); WeakReference wr=new WeakReference(obj); obj=null; //等待一段时间,obj对象就会被垃圾回收 … if(wr.get()==null){ System.out.println(“obj已经被清除了“); }else{ System.out.println(“obj尚未被清除,其信息是 “+obj.toString()); } … 在此例中,透过get()可以取得此Reference的所指到的对象,如果传出值为null的话,代表此对象已经被清除。 这类的技巧,在设计Optimizer或Debugger这类的程序时常会用到,因为这类程序需要取得某对象的信息,但是不可以影响此对象的垃圾收集。 https://www.360docs.net/doc/1d3031453.html,ng.ref.SoftReference Soft Reference虽然和Weak Reference很类似,但是用途却不同。被Soft Reference指到的对象,即使没有任何Direct Reference,也不会被清除。一直要到JVM内存不足时且没有Direct Reference
android手机micro sd卡的EXT2,EXT3分区教程
下面就介绍利用 分区软件Acronis Disk Director Suite 10 通过读卡器给SD卡分三区的方法 (注意,这个方法只能用读卡器,手机U盘模式不行) Acronis Disk Director Suite 10 中文免注册版68MB 下载地址: https://www.360docs.net/doc/1d3031453.html,/groups/@g165358/259136.topic 第一步、安装Acronis Disk Director Suite 10 中文免注册版 第二步、将SD卡插入读卡器,读卡器再插进电脑USB接口 第三步、打开我的电脑,选择SD卡盘符鼠标右键选择格式化(FAT32)不要选择快速格式化 第四步、打开电脑里面的控制面板选择管理工具选择计算机管理 现在看左边,选择储存-> 磁盘管理 现在看右边,看到你的SD卡分区没? 鼠标放在你的SD卡那个分区上,鼠标右键呼出菜单,选择删除磁盘分区,OK 第五步、打开Acronis Disk Director Suite 10 (这一步照抄啊兴的咸湿教程) 但是要强调的是 1,啊兴的这个只做了FAT32和EXT2两个分区,你现在要做的是分别选择FAT32、EXT3、Linux交换三个分区,而不是下面教程里面的两个。这个要注意了! 2, 这个看来要强调一下了,根据经验来看分区先后顺序有的机子没什么要求,而有的机子必须按照先FAT32 再EXT3 最后Linux交换的顺序来分区!如果你没什么经验,还是保守的按照这个顺序来吧! 3,啊兴的这个是256MB 的卡,下面的分区大小不要跟着学 你现在实际应该选择的分区顺序和大小是: 分第一个分区“FAT32”格式大小选择,你的卡的总容量xxxxMB 减580MB,得出来的就都是FAT32的空间容量 分第二个分区“EXT3”格式大小选择,580MB-96MB(EXT3这个分区,300-499MB都可以,但注意不要超过499MB)一般来说这个分区大小在四百多MB,这个分区分的时候需要注意,这个区分完后剩余的空间大小不能超过96MB,推荐剩余94.13M,留给最后的一个分区就行了 分第三个分区“Linux交换”格式大小嘛,最后的都是它的咯,推荐94.13M