哪位大侠能给这段Java语言加上注释,谢谢!再能对程序的功能分析、参数的选择依据给出分析就好了。

哪位大侠能给这段Java语言加上注释,谢谢!再能对程序的功能分析、参数的选择依据给出分析就好了。,第1张

代码我就不看了 直接给你找段类似的

拷下以前写的论文中部分

232 使用JDBC的一般流程

加载某个数据库的驱动(Driver类)

通常使用ClassforName(“驱动的类名“);

连接数据库

Connection con = DriverManagergetConnection(url,username,password);

得到会话

Statement stmt = concreateStatement();

执行 *** 作

Result rs = stmtexecuteQuery(“SQL查询语句”);

5 处理结果

while(rsnext()){

String col1 = rsgetString(1);

……

}

XxxDao接口的设计

XxxDao是数据持久化层对数据库进行 *** 作的接口。所有Service层对数据库的 *** 作都是通过调用DAO层相应的XxxDao接口中的方法来实现。以AdminDao为例说明XxxDao接口是如何定义的:

AdminDaojava

public interface AdminDao {

/ 登陆验证,验证指定管理理ID和密码的记录是否存在 /

public Admin getAdminByIdAndPswd(String adminId, String adminPswd);

/此接口的中其他方法省略/

//其他方法声明的代码省略

}

说明:

XxxDao接口总是被相应的XxxDaoJdbcImpl类实现,通过相应方法的重写达到具体的数据 *** 作。

XxxDao接口实现类XxxDaoJdbcImpl的设计

XxxDaoJdbcImpl是XxxDao接口的实现类,该实现类中通过对接口方法的重写,来达到对特定数据表的增删改查等 *** 作。以AdminDaoJdbcImpl为例来说明是如何进行对数据库表的 *** 作,具体 *** 作说明见代码注释:

AdminDaoJdbcImpljava

public class AdminDaoJdbcImpl implements AdminDao {

/查询指定用户ID和密码的记录是否存在。若存在返回保存此记录的对象/

public Admin getAdminByIdAndPswd(String adminId, String adminPswd) {

/调用utils包中的公共数据库连接类DatabaseConn的静态方法getConnection() 取得指定数据库的连接。/

Connection conn = DatabaseConngetConnection();

try {

/创建(MySql)数据库查询语句/

String sql = "select from t_admin where ADMIN_ID= and ADMIN_PSWD= and STATE='1'";

/ 表示预编译的 SQL 语句的对象。SQL 语句被预编译并存储在 PreparedStatement 对象中,然后可以使用此对象多次高效地执行该语 句。/

PreparedStatement prep = connprepareStatement(sql);

/数字1代表第一个问号,表示用实参adminId给sql中的第一个问号赋值。 下一句类同。在这里必须注意实参的类型和数据库中数据类型的匹配。在 这里实参String类型对应于数据库中的varchar()。/

prepsetString(1, adminId);

prepsetString(2, adminPswd);

/在此 PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的 ResultSet 对象。不会返回 null。ResultSet 本身是一个interface 。 /

ResultSet rs = prepexecuteQuery();

/如果结果集中有值,表示用户输入的管理理ID和密码是有效的,这样的 记录存在。/

if (rsnext()) {

// 先把信息取出来,并实例化一个Admin对象。

Admin admin = new Admin();

adminsetAdminId(adminId);

adminsetAdminPswd(adminPswd);

adminsetAdminName(rsgetString("ADMIN_NAME"));

adminsetLastLoginTime(rsgetTimestamp("LASTLOGIN_TIME"));

adminsetLastLoginMes(rsgetString("LASTLOGIN_MES"));

adminsetAdminDesc(rsgetString("ADMIN_DESC"));

/关闭ResultSet/

rsclose();

/关闭PreparedStatement /

prepclose();

// 修改登陆时间,t_admin表中存储着用户最近一次登陆的时间

String updateLoginTime = "update t_admin set LASTLOGIN_TIME= where ADMIN_ID= ";

PreparedStatement updatePrep = conprepareStatement(updateLoginTime);

updatePrepsetTimestamp(1, new Timestamp(new javautilDate()

getTime()));

updatePrepsetString(2, adminId);

updatePrepexecuteUpdate();

updatePrepclose();

// 返回

return admin;

} else {

/如果结果集中没有值,表示用户输入的ID密码不正确。

关闭ResultSet,关闭PreparedStatement ,程序返回null。/

rsclose();

prepclose();

return null;

}

} catch (Exception e) {

eprintStackTrace();

} finally {

/在程序执行return返回前,finally语句会被执行,在这里执行必须的一 步 *** 作-关闭数据库连接。即使有异常抛出,finally{}语句照样能执行, 保证数据库连接可以安全释放,不会造成数据库出现其它数据异常等问 题。/

DatabaseConncloseConnection(conn);

}

return null;

}

/AdminDao接口中的其他方法的实现/

//其他方法的实现代码省略

}

说明:

整个对数据库 *** 作的过程就是:取得数据库连接--〉创建Sql语句--〉创建PreparedStatement 语句--〉对语句中的‘?’进行赋值--〉执行executeX() *** 作,获得结果放入ResultSet中--〉根据需求从ResultSet中获得需要的结果-->关闭ResultSet-->关闭PreparedStatement --〉断开数据库连接--〉结果返回。

首先nodejs 三个重要的层 Dao持久层(数据层) service服务层(业务层) router表现层(路由)

Dao持久层(数据层) :

mysql的配置 回调服务层的函数

databasejs 这里主要是配置mysql参数

配置过后不用再改变 可以固定不变

var mysql = require('mysql');

function getConAPI(){

var con = mysqlcreateConnection({

host:'127001',

user:'root',

password:'123456',

database:'backstage'

});

return con;

}

function query(sql,param,func){

var con = getConAPI();

if(!func){

func = param;

param = [];

}

conquery(sql,param,function(e,r){

if(e){

consolelog("����������"+e);

}else{

func(r);

}

conend();

});

}

function queryByPage(curpage,eachpage,sql,param,func){

var con = getConAPI();

if(!curpage || curpage <= 0){

curpage = 1;

}

if(!func){

func = param;

param = [];

}

conquery("select count() cnt from ("+sql+") t",param,function(e,r){

var count = r[0]cnt;

var maxpage = Mathceil(count/eachpage);

sql += " limit "+((curpage-1)eachpage)+","+eachpage;

var inner_con = getConAPI();

inner_conquery(sql,param,function(e,r){

var page = {"curpage":curpage,"maxpage":maxpage,"eachpage":eachpage};

if(e){

consolelog("����������"+e);

}else{

pagedata = r;

func(page);

}

inner_conend();

});

conend();

});

}

exportsgetCon = getConAPI;

exportsquery = query;

exportsqueryByPage = queryByPage;

dao ---

userDaojs

这里主要是运用mysql语句 对数据的增删查改

/

Created by HeSir on 2016/3/23

/

var database = require("/database");

//登录

exportsfindeByUserNameAndPwd = function(ary,fun){

databasequery("select from user where username= and password=",ary,fun);

consolelog("查询用户名和密码");

consolelog(ary);

};

service----

服务层 这里主要是连接数据层和表现层的 1校验规则2回调持久层

/

Created by HeSir on 2016/3/23

/

var userDao = require("/dao/userDao");

//登录 ----login

exportslogin = function(ary,fun){

userDaofindeByUserNameAndPwd(ary,fun);

};

router---

管理路径 获取数据 请求(req)和响应(res)

利用ajax提交和获取

/

Created by HeSir on 2016/3/23

/

var express = require('express');

var router = expressRouter();

var userService = require("/service/userService");

//get users listing

routerget('/',function(req,res,next){

ressend('respond width a resource');

});

//登录------login

routerpost("/login",function(req,res){

var ary = [reqbodyusername,reqbodypassword];

userServicelogin(ary,function(i){

if(ilength > 0){

reqsessionuser = i[0];

}

ressend(i);

});

});

moduleexports = router;

appjs

里面配置好路由

var userRoute = require('/routes/UserRoute');

appuse('/users', userRoute);

activity可以 *** 作service了,我们还需要service能 *** 作activity。

我觉得可以有3中方式:

1直接把activity传给service,service通过activity实例随便 *** 作activity

2使用接口回调方式,activity实现相应的接口,service通过接口进行回调,比较灵活

3使用广播

使用广播是比较常见的方式,我们就不具体讲解了,下面我们介绍前面2中方法,具体看代码,用service更新seekbar。

我们的activity代码:

[html] view plain copy

package comhckbindservice;

import androidappActivity;

import androidcontentComponentName;

import androidcontentIntent;

import androidcontentServiceConnection;

import androidosBundle;

import androidosIBinder;

import androidutilLog;

import androidviewView;

import androidwidgetSeekBar;

import androidwidgetToast;

import comhckbindserviceMyServiceMyBuild;

public class MainActivity extends Activity {

private MyService myService; //我们自己的service

private SeekBar pBar; //模拟service更新进度条

private ConnectionService connectionService;

@Override

protected void onCreate(Bundle savedInstanceState) {

superonCreate(savedInstanceState);

setContentView(Rlayoutmain);

pBar = (SeekBar) findViewById(Ridseekbar);

connectionService=new ConnectionService();

}

public void startService(View view) { //绑定service

bindService(new Intent(this,MyServiceclass), connectionService, 1);

}

/

@author Administrator

实现service接口,用于service绑定时候,回调

/

class ConnectionService implements ServiceConnection

{

@Override

public void onServiceConnected(ComponentName name, IBinder service) {

myService=((MyBuild)service)getMyService(); //获取Myservice对象

/

直接把当前对象传给service,这样service就可以随心所欲的调用本activity的各种可用方法

/

myServicesetMainActivity(MainActivitythis); //把当前对象传递给myservice

/

使用一个接口来实现回调,这样比上面方法更加灵活,推荐

/

// myServicesetOnProgressBarListener(new UpdateProgressListener() {

//

// @Override

// public void updateBar(int size) {

// updateBar(size);

// }

// });

}

@Override

public void onServiceDisconnected(ComponentName name) {

}

}

/

@param size

更新seekbar

/

public void updateBar(int size)

{

pBarsetProgress(size);

}

/

@param view

开始更新seekbar

/

public void startBar(View view) {

if (myService==null) {

ToastmakeText(this, "请先开始service", ToastLENGTH_LONG)show();

}

else {

myServicestartUpdateProgress();

}

}

/

@param view

停止更新seekbar

/

public void stopBar(View view) {

if (myService==null) {

ToastmakeText(this, "更新没有开始", ToastLENGTH_LONG)show();

}

else {

myServicestopUpdateProgress();

}

}

/

@param view

停止service

/

public void stopService(View view) {

myService=null;

unbindService(connectionService);

}

@Override

protected void onDestroy() {

superonDestroy();

try {

unbindService(connectionService);

} catch (Exception e) {

}

}

}

重要代码是onServiceConnected回调方法里面

myService=((MyBuild)service)getMyService(); //获取Myservice对象

获取service对象后,我们想怎么 *** 作它都行了,比如上面的,把activity实例直接通过它的方法传递过去,便于

service调用activity的各种方法。或者,设置传递一个回调接口对象过去,用户回调

service代码:

[html] view plain copy

package comhckbindservice;

import androidappService;

import androidcontentIntent;

import androidosBinder;

import androidosHandler;

import androidosIBinder;

import androidutilLog;

public class MyService extends Service{

private int size=0;

private UpdateProgress updateProgress;

private final long TIME=2000;

private boolean isUpdate=true;

private MainActivity activity;

private UpdateProgressListener listener;

@Override

public IBinder onBind(Intent intent) {

return new MyBuild();

}

@Override

public void onCreate() {

superonCreate();

updateProgress=new UpdateProgress();

}

@Override

public int onStartCommand(Intent intent, int flags, int startId) {

return superonStartCommand(intent, flags, startId);

}

/

@author Administrator

线程用来改变seekbar进度的大小

/

class UpdateProgress implements Runnable

{

@Override

public void run() {

if (isUpdate) {

size+=10;

if (size>100) {

size=0;

}

handlersendEmptyMessage(0);

}

}

}

/

调用更新相应方法,更新进度条

/

Handler handler=new Handler()

{

public void handleMessage(androidosMessage msg) {

/

直接调用activity对象里面的方法

/

if (activity!=null) {

activityupdateBar(size);

}

/

使用接口回调

/

// if (listener!=null) {

// listenerupdateBar(size);

// }

handlerpostDelayed(updateProgress, TIME);

};

};

/

停止更新

/

public void stopUpdateProgress()

{

isUpdate=false;

}

/

开启更新

/

public void startUpdateProgress()

{

if (!isUpdate) {

handlerpost(updateProgress);

}

isUpdate=true;

}

public void onDestroy() {

isUpdate=false;

};

/

@param activity

初始化MainActivity对象

/

public void setMainActivity(MainActivity activity)

{

thisactivity=activity;

}

/

@param listener

初始化UpdateProgressListener对象

/

public void setOnProgressBarListener(UpdateProgressListener listener)

{

thislistener=listener;

}

/

@author Administrator

使用类部类,返回当前service的实例,用于activity,调用service的各种方法

/

class MyBuild extends Binder

{

public MyService getMyService()

{

return MyServicethis;

}

}

}

service里面最重要的就是,最下面我们的MyBuild类部类了,通过它的getMyService方法,获取service的实例

该类的实例实在onBind时候,我们返回给activity的。

接口:

[html] view plain copy

package comhckbindservice;

public interface UpdateProgressListener {

public void updateBar(int size);

}

一个简单接口,用于service回调activity

上面是使用 bindService来启动service的,那么如果我们使用startService启动service时候,上面的办法就不行了。

因为onBind不会执行,我们获取不到IBinder实例。这个时候,我们可以使用设计模式的观察者模式来处理。

</summary///<paramname=serverContext服务上下文</param///<paramname=connStr格式如:SERVER=fsgt;INSTANCE=esri_sde;USER=scott;PASSWORD=tiger;VERSION=SDEDEFAULT</param///<returns</returnspublicstaticIWorkspaceGetWorkspaceByServerContext(IServerContextserverContext,stringconnStr){try{IWorkspaceFactory2pWorkspaceFactory2=serverContextCreateObject(esriDataSourcesGDBSdeWorkspaceFactory)asIWorkspaceFactory2;returnpWorkspaceFactory2OpenFromString(connStr,0);}catch{thrownewArgumentException(无法获取连接,请检查连接字符串格式是否正确!);}}publicstaticESRIArcGISServerIServerContextGetServerContext(stringhost,stringserviceName,stringserviceType){ESRIArcGISServerIServerObjectManagerserverManager=GetServerConnection(host)ServerObjectManager;returnserverManagerCreateServerContext(serviceName,serviceType);}///<summary///获取Server的连接,注意此连接必须在客户端与服务端的当前 *** 作系统帐户一致情况下才有效(此时无须再指定用户名/密码)///</summary///<paramname=host</param///<paramname=serviceName</param///<returns</returnspublicstaticGISServerConnectionClassGetServerConnection(stringhost){ESRIArcGISServerGISServerConnectionClassgisConnection=newESRIArcGISServerGISServerConnectionClass();gisConnectionConnect(host);returngisConnection;}在客户端,你大概可以这样调用:[Test]publicvoidGetWorkspaceFromServerContext(){//获取服务上下文IServerContextserverContext=GetServerContext(Host,YourServiceName,MapServer);//打开Workspace的连接字符串,支持直连和非直连方式stringconnStr=SERVER=host;INSTANCE=esri_sde;USER=scott;PASSWORD=tiger;VERSION=SDEDEFAULT;IWorkspacepWorkspace=GetWorkspaceByServerContext(serverContext,connStr);//AssertIsNotNull(pWorkspace);//注意释放上下文serverContextReleaseContext();}之前试过用获取IMap的第一个图层,再QI为IDataset,再获取到IWorkspace这种方式来获取IWorkspace,但这种方式感觉还是不大正规,有旁门左道之嫌。That's all!

以上就是关于哪位大侠能给这段Java语言加上注释,谢谢!再能对程序的功能分析、参数的选择依据给出分析就好了。全部的内容,包括:哪位大侠能给这段Java语言加上注释,谢谢!再能对程序的功能分析、参数的选择依据给出分析就好了。、webstord中怎么启动服务器、service怎么得到绑定的activity实例等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/web/9475540.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存