首页 文章 精选 留言 我的

精选列表

搜索[通用文字识别],共10000篇文章
优秀的个人博客,低调大师

Java数据库通用操作类的代码

Java操作数据库主要有以下三个步骤:1)查找数据库驱动;2)生成Connection对象;3)生成Statement对象,然后使用Statement对象进行数据库的增删改查操作。为了更加方便使用,对上述操作进行封装,增删改三个操作封装为update方法,参数为标准的SQL语句,返回值为boolean类型;查询封装为query方法,方法的参数也为标准的查询SQL语句,返回为记录集ResultSet;单独编写initialize方法实现配置文件读取,Connection对象生成,Statement生成等操作,并将initialize()方法与类的构造函数合并,即一生成类对象即完成初始化操作;close()方法实现了对数据资源回收工作,值得注意的是在初始化操作时,是先生成Connection对象,再生成Statement对象,而关闭时是先关闭Statement对象再关闭Connection对象,这一点一定要注意。 数据库类中可能发生变化的内容:数据库驱动,url,用户名和密码,单独在配置文件中,防止发生变化时需要修改和重新编译代码。 配置文件内容如下: driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8 username=root password=test 具体DBProcess.java的代码如下: packageedu.sgit.db; importjava.io.IOException; importjava.io.InputStream; importjava.sql.Connection; importjava.sql.DriverManager; importjava.sql.ResultSet; importjava.sql.Statement; importjava.util.Properties; /* *表名:test *idint自增 *usernamevarchar(50) *passwordvarchar(50) * */ //insertintotest(username,password) // values('admin','111'); //updatetestsetpassword='222'whereid=1 //updatetestsetpassword='222'whereusername='admin' //deletefromtestwhereid=1; //deletefromtestwhereusername='admin' //select*fromtestwhereusername='admin' publicclassDBProcess{ privateConnectionconn=null; privateStatementstmt=null; publicDBProcess(){ initialize(); } publicvoidinitialize(){ try{ Stringdriver="";//数据库驱动类 Stringurl=""; Stringusername=""; Stringpassword=""; //读配置文件,获取,driver,url,username,password InputStreamin=this.getClass().getResourceAsStream("prop.properties");//字节流 Propertiesprop=newProperties(); try{ prop.load(in); }catch(IOExceptione){ e.printStackTrace(); } driver=prop.getProperty("driver"); url=prop.getProperty("url"); username=prop.getProperty("username"); password=prop.getProperty("password"); //1.查找数据库驱动 Class.forName(driver);//查找数据库驱动 //2.建立数据库连接,并生成相应的连接对象 conn=DriverManager.getConnection(url,username,password);//建立数据库连接 //3.生成数据库操作对象stmt stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); }catch(Exceptionex){ ex.printStackTrace(); } } //在数据表中添加,修改,删除一条记录 publicbooleanupdate(Stringsql){ try{ //添加 //insertintotest(username,password) //values('admin','111'); //修改数据库记录 //updatetestsetpassword='222222'whereid=1, //删除记录 //sql="deletefromtestwhereid=8" stmt.executeUpdate(sql); returntrue; }catch(Exceptionex){ ex.printStackTrace(); returnfalse; } } //查询结果 //sql="select*fromtest" publicResultSetquery(Stringsql){ try{ returnstmt.executeQuery(sql); }catch(Exceptionex){ ex.printStackTrace(); returnnull; } } publicvoidclose(){ try{ if(stmt!=null) stmt.close(); if(conn!=null) conn.close(); }catch(Exceptionex){ ex.printStackTrace(); } } } 测试代码: packageedu.sgit.test; importjava.sql.ResultSet; importedu.sgit.db.DBProcess; publicclassDBTest{ publicstaticvoidmain(String[]args){ /* +--------+--------------+------+-----+---------+----------------+ |Field|Type|Null|Key|Default|Extra| +--------+--------------+------+-----+---------+----------------+ |Id|int(11)|NO|PRI|NULL|auto_increment| |title|varchar(100)|YES||NULL|| |msg|text|YES||NULL|| |inDate|datetime|YES||NULL|| |count|int(11)|YES||0|| +--------+--------------+------+-----+---------+----------------+ **/ DBProcessdb=newDBProcess(); //add Stringtitle="abc"; Stringmsg="msg_0001"; Stringdate="2020-09-2010:45:23"; intcount=100; intid=8; //如果字段是字符,变量前后加'',如果字段是数值类型,不加单引号 //title:'aaa0000' //count:100 Stringsql0="insertintomsg(title,msg,inDate,count)values('abc','msg_0001','2020-09-2010:45:23',100)"; Stringsql1="insertintomsg(title,msg,inDate,count)values('"; sql1=sql1+title+"','"; sql1=sql1+msg+"','"; sql1=sql1+date+"',"; sql1=sql1+count+")"; System.out.println(sql1); booleanflag=db.update(sql1); if(flag){ System.out.println("addok!"); }else{ System.out.println("adderror!"); } //update sql1="updatemsgsettitle='"; sql1=sql1+title+"'whereid="+id; flag=db.update(sql1); if(flag){ System.out.println("udpateok!"); }else{ System.out.println("udpateerror!"); } //delete sql1="deletefrommsgwhereid="+id; flag=db.update(sql1); if(flag){ System.out.println("deleteok!"); }else{ System.out.println("deleteerror!"); } //query sql1="select*frommsg"; ResultSetrs=db.query(sql1); try{ while(rs.next()){ System.out.print(rs.getInt("id")); System.out.print("\t"); System.out.print(rs.getString("title")); System.out.print("\t"); System.out.print(rs.getString("msg")); System.out.print("\t"); System.out.print(rs.getString("inDate")); System.out.print("\t"); //System.out.print(rs.getInt("count")); //System.out.print("\n"); } }catch(Exceptionex){ ex.printStackTrace(); } } }

优秀的个人博客,低调大师

Android 仿IOS的PopupWindow和通用BasePopupWindow搭建

截图 pw.png 实现 1、BasePopupWindow.java 1.1、实现动态加载不同layout 1.2、动态配置是否弹出后背景半透明,关闭时候恢复(监听ondismiss,靠window类来变色) 1.3、一些基础性的方法抽象方法 1.4、为了更加复杂的样式和动效,可以继续扩展此类 /** * Created by wujn on 2018/10/29. * Version : v1.0 * Function: base popuwindow */ public abstract class BasePopupWindow extends PopupWindow implements View.OnClickListener{ /** * 上下文 */ private Context context; /** * 最上边的背景视图 */ private View vBgBasePicker; /** * 内容viewgroup */ private LinearLayout llBaseContentPicker; public BasePopupWindow(Context context) { super(context); this.context = context; View parentView = View.inflate(context, R.layout.base_popup_window_picker, null); vBgBasePicker = parentView.findViewById(R.id.v_bg_base_picker); llBaseContentPicker = (LinearLayout) parentView.findViewById(R.id.ll_base_content_picker); /*** * 添加布局到界面中 */ llBaseContentPicker.addView(View.inflate(context, bindLayout(), null)); setContentView(parentView); //设置PopupWindow弹出窗体的宽 this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); //设置PopupWindow弹出窗体的高 this.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); //在PopupWindow里面就加上下面代码,让键盘弹出时,不会挡住pop窗口。 this.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED); this.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); setFocusable(true);//设置获取焦点 setTouchable(true);//设置可以触摸 setOutsideTouchable(true);//设置外边可以点击 ColorDrawable dw = new ColorDrawable(0xffffff); setBackgroundDrawable(dw); //设置SelectPicPopupWindow弹出窗体动画效果 this.setAnimationStyle(R.style.BottomDialogWindowAnim); initView(parentView); initListener(); initData(); vBgBasePicker.setOnClickListener(this); //是否需要屏幕半透明 setBackgroundHalfTransition(isNeedBackgroundHalfTransition()); } /** * 初始化布局 * * @return */ protected abstract int bindLayout(); /** * 初始化view * * @param parentView */ protected abstract void initView(View parentView); /** * 初始化数据 */ protected abstract void initData(); /** * 初始化监听 */ protected abstract void initListener(); /** * 为了适配7.0系统以上显示问题(显示在控件的底部) * * @param anchor */ @Override public void showAsDropDown(View anchor) { if (Build.VERSION.SDK_INT >= 24) { Rect rect = new Rect(); anchor.getGlobalVisibleRect(rect); int h = anchor.getResources().getDisplayMetrics().heightPixels - rect.bottom; setHeight(h); } super.showAsDropDown(anchor); if(isNeedBgHalfTrans){ backgroundAlpha(0.5f); } } /** * 展示在屏幕的底部 * * @param layoutid rootview */ public void showAtLocation(@LayoutRes int layoutid) { showAtLocation(LayoutInflater.from(context).inflate(layoutid, null), Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, 0); if(isNeedBgHalfTrans){ backgroundAlpha(0.5f); } } /** * 最上边视图的点击事件的监听 * * @param v */ @Override public void onClick(View v) { switch (v.getId()) { case R.id.v_bg_base_picker: dismiss(); break; } } /** * 是否设置背景半透明 * */ public boolean isNeedBackgroundHalfTransition(){ return false; } private boolean isNeedBgHalfTrans = false; private void setBackgroundHalfTransition(boolean isNeed){ isNeedBgHalfTrans = isNeed; if(isNeedBgHalfTrans){ this.setOnDismissListener(new OnDismissListener() { @Override public void onDismiss() { backgroundAlpha(1f); } }); } } /** * 设置添加屏幕的背景透明度 * @param bgAlpha */ private void backgroundAlpha(float bgAlpha) { WindowManager.LayoutParams lp = ((Activity)context).getWindow().getAttributes(); lp.alpha = bgAlpha; //0.0-1.0 ((Activity)context).getWindow().setAttributes(lp); } } 2、base_popup_window_picker.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <View android:id="@+id/v_bg_base_picker" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" /> <LinearLayout android:id="@+id/ll_base_content_picker" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:orientation="vertical" /> </LinearLayout> 3、进入和退出时候的动画style <!--animanation--> <!-- 底部的dialog弹出的动画样式--> <style name="BottomDialogWindowAnim" parent="android:Animation"> <item name="android:windowEnterAnimation">@anim/popup_bottom_enter_anim</item> <item name="android:windowExitAnimation">@anim/popup_bottom_exit_anim</item> </style> 进入动画:popup_bottom_enter_anim.xml <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="200" android:fromYDelta="100%p" android:toYDelta="0" /> <alpha android:duration="200" android:fromAlpha="0.0" android:toAlpha="1.0" /> </set> 退出动画:popup_bottom_exit_anim.xml <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="200" android:fromYDelta="0" android:toYDelta="50%p" /> <alpha android:duration="200" android:fromAlpha="1.0" android:toAlpha="0.0" /> </set> 4、仿IOS的layout:popup_window_album_or_camera.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="10dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/bg_shape_corner_white" android:orientation="vertical"> <Button android:id="@+id/btnCamera" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@null" android:text="拍照" android:textColor="@color/dodgerblue" android:textSize="@dimen/normal_text_size" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="@color/gray_1" /> <Button android:id="@+id/btnAlbum" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@null" android:text="从相册中选择" android:textColor="@color/dodgerblue" android:textSize="@dimen/normal_text_size" /> </LinearLayout> <LinearLayout android:layout_marginTop="10dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/bg_shape_corner_white" android:orientation="vertical"> <Button android:id="@+id/btnCancel" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@null" android:text="@string/cancel" android:textColor="@color/dodgerblue" android:textSize="@dimen/normal_text_size" /> </LinearLayout> </LinearLayout> item的背景style <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="@color/white" /> <corners android:radius="6dp"/> <stroke android:width="1dp" android:color="@color/gray_1" /> </shape> 5、仿IOS的popuwindow类:AlbumOrCameraPopupWindow public class AlbumOrCameraPopupWindow extends BasePopupWindow { private Button btnCamera; private Button btnAlbum; private Button btnCancel; private OnCameraOrAlbumSelectListener onCameraOrAlbumSelectListener; public AlbumOrCameraPopupWindow(Context context,OnCameraOrAlbumSelectListener onCameraOrAlbumSelectListener) { super(context); this.onCameraOrAlbumSelectListener = onCameraOrAlbumSelectListener; } @Override public boolean isNeedBackgroundHalfTransition(){ return true; } @Override protected int bindLayout() { return R.layout.popup_window_album_or_camera; } @Override protected void initView(View parentView) { btnCamera = (Button) parentView.findViewById(R.id.btnCamera); btnAlbum = (Button) parentView.findViewById(R.id.btnAlbum); btnCancel = (Button) parentView.findViewById(R.id.btnCancel); } @Override protected void initData() { } @Override protected void initListener() { btnCamera.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dismiss(); if(onCameraOrAlbumSelectListener != null){ onCameraOrAlbumSelectListener.OnSelectCamera(); } } }); btnAlbum.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dismiss(); if(onCameraOrAlbumSelectListener != null){ onCameraOrAlbumSelectListener.OnSelectAlbum(); } } }); btnCancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dismiss(); } }); } } 选择相机或者相册的监听接口 public interface OnCameraOrAlbumSelectListener { public void OnSelectCamera(); public void OnSelectAlbum(); } 6、具体使用 private AlbumOrCameraPopupWindow ACWindow; private void initListener(){ ACWindow = new AlbumOrCameraPopupWindow(this, onCameraOrAlbumSelectListener); btnIosPopupWindow.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(ACWindow != null && !ACWindow.isShowing()){ ACWindow.showAtLocation(R.layout.activity_view_popup_window); } } }); } /**选择相机或者相册*/ private OnCameraOrAlbumSelectListener onCameraOrAlbumSelectListener = new OnCameraOrAlbumSelectListener() { @Override public void OnSelectCamera() { LogUtil.i("OnSelectCamera..."); ToastUtil.showShort(instance, "相机"); } @Override public void OnSelectAlbum() { LogUtil.i("OnSelectAlbum..."); ToastUtil.showShort(instance, "从相册中选择"); } }; 朝CV工程师又进一步~~~

优秀的个人博客,低调大师

Android 快应用环境搭建(Windows和Mac通用)

快应用官网 快应用官方文档 1. 安装Node.js 图1.png 尽量按照官网推荐的来安装对应包。 查看Node.js版本 node -v 图2.png 2. 安装hap-toolkit # npm设置国内镜像 npm config set registry https://registry.npm.taobao.org # npm查看镜像 npm config get registry # 通过npm仓库安装 npm install -g hap-toolkit # 验证是否安装成功 hap -V 图3.png 3. 资源下载 下载调试器和预览版工具 图4.png 4. 创建项目 创建项目hap init <ProjectName> hap init HelloWorld 图5.png 项目根目录主要结构如下: ├── sign rpk包签名模块 │ └── debug 调试环境 │ ├── certificate.pem 证书文件 │ └── private.pem 私钥文件 ├── src │ ├── Common 公用的资源和组件文件 │ │ └── logo.png 应用图标 │ ├── Demo 页面目录 │ | └── index.ux 页面文件,可自定义页面名称 │ ├── app.ux APP文件,可引入公共脚本,暴露公共数据和方法等 │ └── manifest.json 项目配置文件,配置应用图标、页面路由等 └── package.json 定义项目需要的各种模块及配置信息 安装npm依赖-进入项目的根目录再执行命令 npm install 手动编译项目 npm run build 自动编译项目 npm run watch 5. 安装应用 扫码安装 # 开启Http服务器 npm run server # 自定义端口的Http服务器 npm run server -- --port 8080

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册