Unity接入今日头条广告(激励广告)

      写这篇博客主要是为了使用Eclipse导出Jar包和Res文件去给Unity调用。之前我写过一篇博客(https://www.cnblogs.com/weiqiangwaideshijie/p/7715861.html)是直接将Unity导出Android工程去接入SDK,现在换另外一种模式去接入SDK,使用的通讯框架还是之前的。

一  为了避免不必要的错误,我这边是用Unity去导出一个空的Android工程而不是直接在Eclipse去直接新建一个acivity,再去引用Unity的Classes.jar文件。用Eclipse打开unity导出的空的工程,然后将之前写的通讯框架导入进去,并且删除untiy自带的三个类

二  UnityPlayerActivity引用头条的库文件(箭头所指的),在将头条的Res文件给copy到UnityPlayerActivtiy里面,不要去覆盖,不然Unity自带的一些东西被覆盖掉,导致manifest里面找不到对应的配置和资源。

三 然后配置我们的Manifest清单文件,这个直接CopyDemo里面自己需要的配置就可以了。

1<?xml version="1.0" encoding="utf-8"?> 2<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.usfun.cbddn" android:installLocation="preferExternal"> 3 <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:smallScreens="true" android:xlargeScreens="true" /> 4 <!--必须要有的权限--> 5 <uses-permission android:name="android.permission.INTERNET" /> 6 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 7 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 8 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 9 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 10 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 11 <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> 12 <uses-permission android:name="android.permission.GET_TASKS" /> 13 <!--最好能提供的权限--> 14 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 15 <!-- 如果有视频相关的广告且使用textureView播放,请务必添加,否则黑屏 --> 16 <uses-permission android:name="android.permission.WAKE_LOCK" /> 17 <application android:icon="@drawable/app_icon" android:label="@string/app_name" android:isGame="true" android:banner="@drawable/app_banner"> 18 <activity android:label="@string/app_name" android:name="com.cw.androidsdk.MainActivity" android:screenOrientation="fullSensor" android:launchMode="singleTask" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale"> 19 <intent-filter> 20 <action android:name="android.intent.action.MAIN" /> 21 <category android:name="android.intent.category.LAUNCHER" /> 22 <category android:name="android.intent.category.LEANBACK_LAUNCHER" /> 23 </intent-filter> 24 <meta-data android:name="unityplayer.UnityActivity" android:value="true" /> 25 </activity> 26 <!-- 以下为头条网盟sdk的配置 start --> 27 <activity android:configChanges="keyboardHidden|orientation|screenSize" android:launchMode="singleTask" android:name="com.bytedance.sdk.openadsdk.activity.TTLandingPageActivity" /> 28 <activity android:configChanges="keyboardHidden|orientation|screenSize" android:launchMode="singleTask" android:name="com.bytedance.sdk.openadsdk.activity.TTVideoLandingPageActivity" /> 29 <activity android:configChanges="keyboardHidden|orientation|screenSize" android:launchMode="singleTask" android:name="com.bytedance.sdk.openadsdk.activity.TTRewardVideoActivity" /> 30 <activity android:configChanges="keyboardHidden|orientation|screenSize" android:launchMode="singleTask" android:name="com.bytedance.sdk.openadsdk.activity.TTFullScreenVideoActivity" /> 31 <activity android:launchMode="singleTask" android:name="com.bytedance.sdk.openadsdk.activity.TTDelegateActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> 32 <service android:name="com.bytedance.sdk.openadsdk.multipro.aidl.BinderPoolService" /> 33 <service android:name="com.ss.android.socialbase.downloader.notification.DownloadNotificationService" /> 34 <service android:name="com.ss.android.socialbase.downloader.downloader.DownloadService" /> 35 <service android:name="com.ss.android.socialbase.downloader.downloader.IndependentProcessDownloadService" android:process=":downloader"> 36 <intent-filter> 37 <action android:name="com.ss.android.socialbase.downloader.remote" /> 38 </intent-filter> 39 </service> 40 <service android:name="com.ss.android.socialbase.downloader.impls.DownloadHandleService" /> 41 <service android:name="com.ss.android.socialbase.appdownloader.AppDownloadHandleService" /> 42 <activity android:launchMode="singleTask" android:name="com.ss.android.socialbase.appdownloader.view.DownloadSizeLimitActivity" android:theme="@android:style/Theme.Dialog" /> 43 <activity android:launchMode="singleTask" android:name="com.ss.android.socialbase.appdownloader.view.DownloadTaskDeleteActivity" android:theme="@android:style/Theme.Dialog" /> 44 <activity android:launchMode="standard" android:name="com.ss.android.downloadlib.activity.InteractionMiddleActivity" /> 45 <receiver android:name="com.ss.android.downloadlib.core.download.DownloadReceiver" /> 46 <!-- authorities前缀请使用自己的app包名 --> 47 <provider android:authorities="com.usfun.cbddn.fileprovider" android:exported="false" android:grantUriPermissions="true" android:name="android.support.v4.content.FileProvider"> 48 <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> 49 </provider> 50 <provider android:authorities="com.usfun.cbddn.TTMultiProvider" android:exported="false" android:name="com.bytedance.sdk.openadsdk.multipro.TTMultiProvider" /> 51 <!-- 头条网盟sdk的配置 end --> 52 <meta-data android:name="android.max_aspect" android:value="2.4" /> 53 </application> 54 <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="24" /> 55 <uses-feature android:glEsVersion="0x00020000" /> 56 <uses-feature android:name="android.hardware.touchscreen" android:required="false" /> 57 <uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="false" /> 58 <uses-feature android:name="android.hardware.touchscreen.multitouch.distinct" android:required="false" /> 59</manifest>

四 以上的步骤,我们就把环境给配置好了,最后,按照文档去写入播放广告的代码。我这边直接入奖励广告。(下面有些和Unity交互代码是这个项目不需要的,看加粗倾斜的代码块)

MainActivity

1package com.cw.androidsdk; 2 3import android.os.Bundle; 4 5 6import com.bytedance.sdk.openadsdk.AdSlot; 7import com.bytedance.sdk.openadsdk.TTAdConfig; 8import com.bytedance.sdk.openadsdk.TTAdConstant; 9import com.bytedance.sdk.openadsdk.TTAdManager; 10import com.bytedance.sdk.openadsdk.TTAdNative; 11import com.bytedance.sdk.openadsdk.TTAdSdk; 12import com.bytedance.sdk.openadsdk.TTAppDownloadListener; 13import com.bytedance.sdk.openadsdk.TTFullScreenVideoAd; 14import com.bytedance.sdk.openadsdk.TTRewardVideoAd; 15 16import com.sdk.api.SDKAPI; 17import com.sdk.api.SDKUtility; 18 19 20 21 22 23 24import com.unity3d.player.UnityPlayer; 25import com.unity3d.player.UnityPlayerActivity; 26import java.util.UUID; 27 28import org.json.JSONException; 29import org.json.JSONObject; 30 31 32 33import android.R.string; 34 35import android.app.Activity; 36import android.app.AlertDialog; 37import android.content.DialogInterface; 38import android.content.Intent; 39 40import android.graphics.PixelFormat; 41 42 43 44import android.os.Handler; 45 46import android.os.Looper; 47 48import android.os.Message; 49 50import android.text.TextUtils; 51 52import android.util.Log; 53 54import android.view.Window; 55 56import android.widget.Toast; 57public class MainActivity extends UnityPlayerActivity 58 59{ 60 public static Activity CurrentActivity; 61 public static MyHandler myHandler;// 62 63 private TTAdNative mTTAdNative; 64 private TTRewardVideoAd mttRewardVideoAd; 65 private TTAdManager ttAdManager; 66 67 @Override 68 protected void onCreate(Bundle arg0) { 69 // TODO Auto-generated method stub 70 super.onCreate(arg0); 71 CurrentActivity=this; 72 myHandler=new MyHandler(); 73 74 75//如果明确某个进程不会使用到广告SDK,可以只针对特定进程初始化广告SDK的content 76//if (PROCESS_NAME_XXXX.equals(processName)) { 77// TTAdSdk.init(context, config); 78//} 79} 80 81 @Override 82 protected void onStart() { 83 84 super.onStart(); 85 } 86 87 @Override 88 protected void onPause() { 89 90 super.onPause(); 91 } 92 93 @Override 94 protected void onResume() { 95 96 super.onResume(); 97 } 98 99 100 public void onNewIntent(Intent newIntent){ 101 102 super.onNewIntent(newIntent); 103 } 104 105 @Override 106 protected void onStop() { 107 108 super.onStop(); 109 } 110 111 112 @Override 113 protected void onDestroy() { 114 115 super.onDestroy(); 116 } 117 118 @Override 119 protected void onRestart() { 120 121 super.onRestart(); 122 } 123 124 public class MyHandler extends Handler 125 { 126 127 public MyHandler() 128 129 { 130 131 132 133 } 134 135 public MyHandler(Looper L) { 136 super(L); 137 } 138 139 140 141 /* 142 143 * 锟斤拷锟斤拷锟斤拷锟斤拷锟叫达拷梅锟斤拷锟斤拷锟斤拷锟斤拷芨锟斤拷锟较� 144 145 * */ 146 147 @Override public void handleMessage(Message msg) 148 149 { 150 151 if(msg.what==SDKUtility.Init) 152 153 { 154 //"5001121" 155 Log.i("android", "Init"); 156 // Toast.makeText(CurrentActivity, "Init", Toast.LENGTH_SHORT).show(); 157 158 TTAdSdk.init(CurrentActivity, 159 new TTAdConfig.Builder() 160 .appId(SDKAPI.AppID) 161 .useTextureView(false) //使用TextureView控件播放视频,默认为SurfaceView,当有SurfaceView冲突的场景,可以使用TextureView 162 .appName("APP测试媒体") 163 .titleBarTheme(TTAdConstant.TITLE_BAR_THEME_DARK) 164 .allowShowNotify(true) //是否允许sdk展示通知栏提示 165 .allowShowPageWhenScreenLock(true) //是否在锁屏场景支持展示广告落地页 166 .debug(false) //测试阶段打开,可以通过日志排查问题,上线时去除该调用 167 .directDownloadNetworkType(TTAdConstant.NETWORK_STATE_WIFI, TTAdConstant.NETWORK_STATE_3G) //允许直接下载的网络状态集合 168 .supportMultiProcess(false) //是否支持多进程,true支持 169 .build()); 170 171 172 ttAdManager = TTAdSdk.getAdManager(); 173 mTTAdNative = TTAdSdk.getAdManager().createAdNative(CurrentActivity); 174 175 // Toast.makeText(CurrentActivity, "初始化", Toast.LENGTH_SHORT).show(); 176 177 178 }else if(msg.what==SDKUtility.Load_Full_ScreenVideo) 179 { 180 //901121430 181 Log.i("android", "loadAd"); 182 // Toast.makeText(CurrentActivity, "loadAd", Toast.LENGTH_SHORT).show(); 183 loadAd(SDKAPI.AdsID, TTAdConstant.HORIZONTAL); 184 else if(msg.what==SDKUtility.LoginIn) 185 { 186 Log.i("android", "LoginIn"); 187 188 }else if(msg.what==SDKUtility.LoginOut) 189 { 190 Log.i("android", "logout"); 191 192 }else if(msg.what==SDKUtility.Pay) 193 { 194 195 196 }else if(msg.what==SDKUtility.OnExit) 197 { 198 199 }else if(msg.what==SDKUtility.SubmitExtraDataOnEnterGame) 200 { 201 202 }else if(msg.what==SDKUtility.SubmitExtraDataOnExitGame) 203 { 204 205 }else if(msg.what==SDKUtility.GamePause) 206 { 207 Log.i("android", "GamePause" 208 } 209 private boolean mHasShowDownloadActive = false; 210 private void loadAd(String codeId, int orientation) { 211 //step4:创建广告请求参数AdSlot,具体参数含义参考文档 212 AdSlot adSlot = new AdSlot.Builder() 213 .setCodeId(codeId) 214 .setSupportDeepLink(true) 215 .setImageAcceptedSize(1080, 1920) 216 .setRewardName("金币") //奖励的名称 217 .setRewardAmount(3) //奖励的数量 218 .setUserID("user123")//用户id,必传参数 219 .setMediaExtra("media_extra") //附加参数,可选 220 .setOrientation(orientation) //必填参数,期望视频的播放方向:TTAdConstant.HORIZONTAL 或 TTAdConstant.VERTICAL 221 .build(); 222 //step5:请求广告 223 mTTAdNative.loadRewardVideoAd(adSlot, new TTAdNative.RewardVideoAdListener() { 224 @Override 225 public void onError(int code, String message) { 226 Log.i("android", message); 227 // Toast.makeText(CurrentActivity, message, Toast.LENGTH_SHORT).show(); 228 UnityPlayer.UnitySendMessage("TouTiaoSDKMgr", "UnCanPlay", ""); 229 230 } 231 232 //视频广告加载后,视频资源缓存到本地的回调,在此回调后,播放本地视频,流畅不阻塞。 233 @Override 234 public void onRewardVideoCached() { 235 // Toast.makeText(CurrentActivity, "onRewardVideoCached", Toast.LENGTH_SHORT).show(); 236 UnityPlayer.UnitySendMessage("TouTiaoSDKMgr", "CanPlay", ""); 237 238 } 239 240 //视频广告的素材加载完毕,比如视频url等,在此回调后,可以播放在线视频,网络不好可能出现加载缓冲,影响体验。 241 @Override 242 public void onRewardVideoAdLoad(TTRewardVideoAd ad) { 243 Log.i("android", "加载完毕"); 244 mttRewardVideoAd = ad; 245 UnityPlayer.UnitySendMessage("TouTiaoSDKMgr", "CanPlay", ""); 246// mttRewardVideoAd.setShowDownLoadBar(false); 247 mttRewardVideoAd.setRewardAdInteractionListener(new TTRewardVideoAd.RewardAdInteractionListener() { 248 249 @Override 250 public void onAdShow() { 251 // Toast.makeText(CurrentActivity, "onAdShow", Toast.LENGTH_SHORT).show(); 252 UnityPlayer.UnitySendMessage("TouTiaoSDKMgr", "AdShow", ""); 253 } 254 255 @Override 256 public void onAdVideoBarClick() { 257 // Toast.makeText(CurrentActivity, "onAdVideoBarClick", Toast.LENGTH_SHORT).show(); 258 } 259 260 @Override 261 public void onAdClose() { 262 // Toast.makeText(CurrentActivity, "onAdClose", Toast.LENGTH_SHORT).show(); 263 } 264 265 //视频播放完成回调 266 @Override 267 public void onVideoComplete() { 268 //Toast.makeText(CurrentActivity, "onVideoComplete", Toast.LENGTH_SHORT).show(); 269 UnityPlayer.UnitySendMessage("TouTiaoSDKMgr", "OnAdPlayComplete", ""); 270 } 271 272 //视频播放完成后,奖励验证回调,rewardVerify:是否有效,rewardAmount:奖励梳理,rewardName:奖励名称 273 @Override 274 public void onRewardVerify(boolean rewardVerify, int rewardAmount, String rewardName) { 275 // Toast.makeText(CurrentActivity, rewardVerify+" "+rewardAmount+" "+rewardName, Toast.LENGTH_SHORT).show(); 276 } 277 278 @Override 279 public void onVideoError() { 280 // Toast.makeText(CurrentActivity, "onVideoError", Toast.LENGTH_SHORT).show(); 281 UnityPlayer.UnitySendMessage("TouTiaoSDKMgr", "OnPlayFail", ""); 282 } 283 }); 284 mttRewardVideoAd.setDownloadListener(new TTAppDownloadListener() { 285 @Override 286 public void onIdle() { 287 mHasShowDownloadActive = false; 288 289 } 290 291 @Override 292 public void onDownloadActive(long totalBytes, long currBytes, String fileName, String appName) { 293 if (!mHasShowDownloadActive) { 294 mHasShowDownloadActive = true; 295 // Toast.makeText(CurrentActivity, "下载中,点击下载区域暂停", Toast.LENGTH_SHORT).show(); 296 } 297 } 298 299 @Override 300 public void onDownloadPaused(long totalBytes, long currBytes, String fileName, String appName) { 301 // Toast.makeText(CurrentActivity, "下载暂停,点击下载区域继续", Toast.LENGTH_SHORT).show(); 302 } 303 304 @Override 305 public void onDownloadFailed(long totalBytes, long currBytes, String fileName, String appName) { 306 // Toast.makeText(CurrentActivity, "下载失败,点击下载区域重新下载", Toast.LENGTH_SHORT).show(); 307 } 308 309 @Override 310 public void onDownloadFinished(long totalBytes, String fileName, String appName) { 311 // Toast.makeText(CurrentActivity, "下载失败,点击下载区域重新下载", Toast.LENGTH_SHORT).show(); 312 } 313 314 @Override 315 public void onInstalled(String fileName, String appName) { 316 // Toast.makeText(CurrentActivity, "安装完成,点击下载区域打开", Toast.LENGTH_SHORT).show(); 317 } 318 }); 319 } 320 }); 321 } 322}

SDKAIP

1package com.sdk.api; 2 3import android.R.integer; 4import android.R.string; 5import android.text.GetChars; 6import android.util.Log; 7 8import com.cw.androidsdk.MainActivity; 9 10public class SDKAPI { 11 12 public static String AppID=""; 13 public static String AdsID=""; 14 15 16 /* 17 18 * SDK��ʼ�� 19 20 * */ 21 22 public static void OnInit(String appId,String adsId) 23 { 24 Log.i("android", "SDKAPI OnInit"); 25 AppID=appId; 26 AdsID=adsId; 27 28 Log.i("android", "appId:"+appId); 29 Log.i("android", "adsId:"+adsId); 30 MainActivity.myHandler.sendEmptyMessage(SDKUtility.Init); 31 } 32 33 /* 34 35 * ���� 36 37 * */ 38 39 public static void OnLogIn() 40 41 { 42 Log.i("android", "SDKAPI OnLogIn"); 43 MainActivity.myHandler.sendEmptyMessage(SDKUtility.LoginIn); 44 45 } 46 public static void LoadAd() 47 { 48 Log.i("android", "SDKAPI LoadAd"); 49 MainActivity.myHandler.sendEmptyMessage(SDKUtility.Load_Full_ScreenVideo); 50 51 52 } 53 54 public static void PlayAd() 55 { 56 Log.i("android", "SDKAPI PlayAd"); 57 MainActivity.myHandler.sendEmptyMessage(SDKUtility.Play_Full_SrcennVideo); 58 59 60 } 61 /* 62 63 * �dz� 64 65 * */ 66 67 public static void OnLogOut() 68 { 69 Log.i("android", "SDKAPI OnLogOut"); 70 MainActivity.myHandler.sendEmptyMessage(SDKUtility.LoginOut); 71 72 } 73 74 /* 75 76 * ֧�� 77 78 * */ 79 80 public static void OnPay(float requestAmount ,int productIndex ,String productName,String orderID ) 81 82 { 83 Log.i("android", "SDKAPI OnPay"); 84 85 86 MainActivity.myHandler.sendEmptyMessage(SDKUtility.Pay); 87 } 88 /* 89 90 * ��Ϸ��ͣ 91 92 * */ 93 public static void OnGamePause() 94 { 95 Log.i("android", "SDKAPI OnGamePause"); 96 MainActivity.myHandler.sendEmptyMessage(SDKUtility.GamePause); 97 } 98 99 /* 100 101 * �ύ������Ϣ 102 *������Ϸ 103 * �˳���Ϸ 104 *����ؿ�* */ 105 public static void OnSubmitExtraData(int id) 106 { 107 108 109 } 110 /* 111 112 * ������Ϸ�ύ���� 113 114 * */ 115 public static void OnSubmitExtraDataOnExitGame() 116 { 117 Log.i("android", "SDKAPI OnSubmitExtraDataOnExitGame"); 118 MainActivity.myHandler.sendEmptyMessage(SDKUtility.SubmitExtraDataOnExitGame); 119 } 120 /* 121 122 * �˳���Ϸ�ύ���� 123 124 * */ 125 public static void OnSubmitExtraDataOnEnterGame() 126 { 127 Log.i("android", "SDKAPI OnSubmitExtraDataOnEnterGame"); 128 MainActivity.myHandler.sendEmptyMessage(SDKUtility.SubmitExtraDataOnEnterGame); 129 } 130 131 /* 132 * �˳���Ϸ 133 134 * */ 135 public static void OnExit() 136 { 137 Log.i("android", "SDKAPI OnExit"); 138 MainActivity.myHandler.sendEmptyMessage(SDKUtility.OnExit); 139 } 140 141}

SDKUtility

1package com.sdk.api; 2 3import android.R.integer; 4 5public class SDKUtility { 6 public static final int Init=0; 7 public static final int LoginIn=1; 8 public static final int LoginOut=2; 9 public static final int Pay=3; 10 public static final int GamePause=4; 11 public static final int SubmitExtraDataOnEnterGame=5; 12 public static final int SubmitExtraDataOnExitGame=6; 13 public static final int OnExit=7; 14 15 public static final int Load_Full_ScreenVideo=9; 16 public static final int Play_Full_SrcennVideo=8; 17}

 五 导出Jar包。注意只要导出Src文件。

用好压去打开jar包,里面就是我们这边写的通讯框架的三个文件(如果之前里面没删除unity自带的三个类,这里到处jar包的时候,就会带有那三个类,在给Unity使用的话,会报错,我们也可以在这里手动删除这三个类)

6 下面就是在Unity里面去调用了,将Jar包,Res文件和引用到的库,manifest文件导入到unity里面,目录如下:

7 编写C#脚本去调用Androidd 的接口并且接受返回的回调。

1/************* 2** Company: DX 3**SrtiptName:TouTiaoSDKMgr 4** Auth: CW 5** Des: 文本描述 6** Ver.: V1.0.0 7*************/ 8 9using UnityEngine; 10using System.Collections; 11using UnityEngine.UI; 12 13public class TouTiaoSDKMgr : MonoBehaviour 14{ 15 private AndroidJavaClass _jc = null; 16 private Transform Sendertran; 17 public static TouTiaoSDKMgr Instance; 18 public string appID; 19 public string AdsID; 20 21 public bool IsCanPlay = false; 22 23 24 private E_AdsType _currentAdsType = E_AdsType.Nil; 25 26 void Awake() 27 { 28 Instance = this; 29 _jc = new AndroidJavaClass("com.sdk.api.SDKAPI"); 30 OnInit(); 31 32 Debug.Log("Awake"); 33 LoadAd(); 34 } 35 36 public void OnInit() 37 { 38 Debug.Log("OnInit"); 39 _jc.CallStatic("OnInit", appID, AdsID); 40 41 } 42 43 public void LoadAd() 44 { 45 Debug.Log("LoadAd"); 46 _jc.CallStatic("LoadAd"); 47 48 } 49 public void PlayAd() 50 { 51 Debug.Log("PlayAd"); 52 _jc.CallStatic("PlayAd"); 53 _jc.CallStatic("LoadAd"); 54 55 } 56 57 /// <summary> 58 /// 播放视频广告 59 /// </summary> 60 public void PlayVideoAds(E_AdsType adsType, int id, Transform sender = null) 61 { 62 if (IsCanPlay) 63 { 64 PlayAd(); 65 66 } 67 } 68 69 public void AdShow() 70 { 71 72 73 } 74 75 76 public void OnAdPlayComplete() 77 { 78 79 } 80 81 public void OnPlayFail() 82 { 83 84 } 85 86 87 public void CanPlay() 88 { 89 IsCanPlay = true; 90 } 91 92 public void UnCanPlay() 93 { 94 IsCanPlay = false; 95 } 96 97 98 99 100}
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )